比较的混乱,没怎么整理,主要是实现了一个思路:
using System;
using System.Data;
using System.Data.SqlClient;
namespace GYQM.Common
{
/// <summary>
/// 为C/S结构的系统提供数据访问组件
/// </summary>
public class ClsConnectForCS
{
#region 自定义私有字段
private string sConnString; //SQL Server的连接字符串
private SqlConnection cConnection=null; //SQL Server的连接器
private int trans=0; //记录事务的次数
private static ClsConnectForCS cConnectDAL=null; //私有类变量,用来返回类的实例化
#endregion
#region 单件模式(SingleTon Model)
/// <summary>
/// 当构造函数为私有时,外界不能实例化该类
/// </summary>
private ClsConnectForCS()
{}
/// <summary>
/// 该类真正的实例化函数,用来返回该类的实例
/// </summary>
/// <returns>ConnectDAL</returns>
public static ClsConnectForCS Instance()
{
if (cConnectDAL == null)
cConnectDAL=new ClsConnectForCS();
return cConnectDAL;
}
#endregion
#region Overrides Function
/// <summary>
/// 覆盖默认的缺省函数,使其能够按照我们的方式来返回字符串
/// </summary>
/// <returns>数据库连接字符串</returns>
public override string ToString()
{
return sConnString;
}
#endregion
#region public Methods for users to act in certain function
/// <summary>
/// 打开数据库的连接
/// </summary>
/// <returns>如果成功返回真,否则返回假</returns>
public bool OpenDatabase()
{
try
{
sConnString = Agriculture.ClsCommon.ReadAppSettings("sqlConnection.ConnectionString"); if (cConnection == null)
cConnection=new SqlConnection(sConnString);
if (cConnection.State!=ConnectionState.Open)
cConnection.Open();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 关闭数据库
/// </summary>
/// <returns>成功则返回True</returns>
public bool CloseDatabase()
{
try
{
if (trans!=0)
return true;
if (cConnection.State!=ConnectionState.Closed)
cConnection.Close();
return true;
}
catch
{
return false;
}
}
/// <summary>
/// 执行sql语句,返回DataTable
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns>数据表</returns>
public DataTable ExecuteDataTable(string sql)
{
DataTable dt = new DataTable();
SqlDataAdapter sAdapter=new SqlDataAdapter(sql,cConnection);
sAdapter.Fill(dt);
return dt;
}
public DataTable ExecuteDataTable(SqlCommand cmd)
{
DataTable dt = new DataTable();
cmd.Connection = this.cConnection;
SqlDataAdapter sAdapter=new SqlDataAdapter(cmd);
sAdapter.Fill(dt);
return dt;
}
/// <summary>
/// 执行sql语句,返回DataSet
/// </summary>
/// <param name="sql">要执行的SQL语句</param>
/// <returns>数据集</returns>
public DataSet ExecuteDataSet(string sql)
{
DataSet ds = new DataSet();
SqlDataAdapter sAdapter=new SqlDataAdapter(sql,cConnection);
sAdapter.Fill(ds);
return ds;
}
/// <summary>
///执行SqlString语句,不需要从数据库返回任何内容
/// </summary>
/// <param name="SqlString"></param>
/// <returns>如果成功返回真,否则返回假</returns>
public void ExecuteNonQuery(string SqlString)
{
SqlCommand cCmd=new SqlCommand();
cCmd.Connection=cConnection;
cCmd.CommandText=SqlString;
cCmd.ExecuteNonQuery();
}
public void ExecuteNonQuery(SqlCommand cmd)
{
cmd.Connection = cConnection;
cmd.ExecuteNonQuery();
}
/// <summary>
/// 返回标量值,上一级人员可以根据需要进行类型转换
/// </summary>
/// <param name="sql">传递过来的sql语句</param>
/// <returns>成功或失败</returns>
public object ExecuteScalar(string sql)
{
SqlCommand cCmd=new SqlCommand();
cCmd.Connection=cConnection;
cCmd.CommandText=sql;
return cCmd.ExecuteScalar();
}
/// <summary>
/// 执行Command
/// 编码:王凯
/// </summary>
/// <param name="cmd">Command</param>
/// <returns>Object</returns>
public object ExecuteScalar(System.Data.SqlClient.SqlCommand cmd)
{
cmd.Connection = cConnection;
return cmd.ExecuteScalar();
}
/// <summary>
/// 执行Command对象
/// </summary>
/// <param name="myCommand">从上层传递过来的命令对象</param>
/// <returns>如果成功返回真,否则返回假</returns>
public void Run(SqlCommand myCommand)
{
myCommand.Connection=cConnection;
myCommand.ExecuteNonQuery();
}
/// <summary>
/// 执行Command语句
/// </summary>
/// <param name="myCommand">从上层传递过来的命令对象</param>
/// <param name="dt">填充从上层传递过来的表对象</param>
/// <returns>如果成功返回真,否则返回假</returns>
public bool Run(SqlCommand myCommand,DataTable dt)
{
try
{
myCommand.Connection=cConnection;
SqlDataAdapter sDataAdapter = new SqlDataAdapter();
sDataAdapter.SelectCommand =myCommand;
sDataAdapter.Fill(dt);
return true;
}
catch
{
return false;
}
}
public DataSet Run(string sqlStr)
{
DataSet ds=new DataSet();
SqlCommand myCommand=new SqlCommand(sqlStr,cConnection);
SqlDataAdapter sDataAdapter = new SqlDataAdapter();
sDataAdapter.SelectCommand =myCommand;
sDataAdapter.Fill(ds);
return ds;
}
/// <summary>
/// <param name="mySelectQuery"></param>
/// <returns>如果成功返回SqlDataReader,包含多个字段的结果集;否则返回空的SqlDataReader</returns>
public SqlDataReader Getkind(string mySelectQuery)
{
SqlCommand myCommand=null;
SqlDataReader myReader=null;
try
{
myCommand = new SqlCommand(mySelectQuery,cConnection);
myReader = myCommand.ExecuteReader();
return myReader;
}
catch
{
return myReader;
}
finally
{
myCommand.Dispose();
myCommand=null;
}
}
/// <summary>
/// 执行sql语句
/// </summary>
/// <param name="sql"></param>
/// <param name="myDataSet"></param>
/// <returns>成功返回数据集</returns>
public bool Run(string sql,DataTable myDataTable)
{
SqlDataAdapter sAdapter=null;
try
{
sAdapter=new SqlDataAdapter(sql,cConnection);
sAdapter.Fill(myDataTable);
return true;
}
catch
{
throw;
}
finally
{
myDataTable=null;
sAdapter.Dispose();
sAdapter=null;
}
}
/// <summary>
/// 事务开始
/// </summary>
public void BeginTransaction()
{
trans+=1;
SqlCommand sCmd=null;
sCmd=new SqlCommand("BEGIN TRANSACTION",cConnection);
sCmd.ExecuteNonQuery();
sCmd.Dispose();
sCmd=null;
}
/// <summary>
/// 事务提交
/// </summary>
public void CommitTransaction()
{
trans-=1;
SqlCommand sCmd=null;
sCmd=new SqlCommand("COMMIT TRANSACTION",cConnection);
sCmd.ExecuteNonQuery();
sCmd.Dispose();
sCmd=null;
}
/// <summary>
/// 事务回滚
/// </summary>
public void RollbackTransaction()
{
trans-=1;
SqlCommand sCmd=null;
sCmd=new SqlCommand("ROLLBACK TRANSACTION",cConnection);
sCmd.ExecuteNonQuery();
sCmd.Dispose();
sCmd=null;
}
/// <summary>
/// 显式释放内存
/// </summary>
public void Dispose()
{
if (cConnection!=null)
cConnection= null;
}
#endregion
}
}