using System;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;
/// <summary>
/// DataAccess 的摘要說明。
/// <description>數(shù)據(jù)處理基類,調(diào)用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref DataSet ds); </description>
/// </summary>
public class Dbconn
{
#region 屬性
protected static SqlConnection conn = new SqlConnection();
//protected static bool mustCloseConnection = false;
//protected static SqlCommand comm = new SqlCommand();
#endregion
public Dbconn()
{
//init();
}
#region 內(nèi)部函數(shù) 靜態(tài)方法中不會執(zhí)行Dbconn()構(gòu)造函數(shù)
/// <summary>
/// 打開數(shù)據(jù)庫連接
/// </summary>
private static void openConnection()
{
//SysConfig.ConnectionString 為系統(tǒng)配置類中連接字符串,如:"server=localhost;database=databasename;uid=sa;pwd=;"
if (conn.State == ConnectionState.Closed)
{
conn.ConnectionString = ConfigurationManager.AppSettings["DBConnStr"]; //SysConfig.ConnectionString;
conn.Open();
}
else
{
conn.Close();
conn.ConnectionString = ConfigurationManager.AppSettings["DBConnStr"]; //SysConfig.ConnectionString;
conn.Open();
}
//if (conn.State == ConnectionState.Closed)
//{
// conn.ConnectionString = ConfigurationManager.AppSettings["DBConnStr"]; //SysConfig.ConnectionString;
// comm.Connection = conn;
// conn.Open();
//}
//else if (conn.State == ConnectionState.Broken)
//{
// conn.ConnectionString = ConfigurationManager.AppSettings["DBConnStr"]; //SysConfig.ConnectionString;
// comm.Connection = conn;
// conn.Close();
// conn.Open();
//}
}
/// <summary>
/// 關(guān)閉當(dāng)前數(shù)據(jù)庫連接
/// </summary>
private static void closeConnection()
{
if (conn.State == ConnectionState.Open)
conn.Close();
conn.Dispose();
//comm.Dispose();
}
#endregion
/// <summary>
/// 執(zhí)行Sql查詢語句
/// </summary>
/// <param >傳入的Sql語句</param>
public static void ExecuteSql(string sqlstr)
{
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
}
/// <summary>
/// 執(zhí)行存儲過程
/// </summary>
/// <param >存儲過程名</param>
/// <param >SqlParameters 集合</param>
public static void ExecutePorcedure(string procName, SqlParameter[] coll)
{
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
for (int i = 0; i < coll.Length; i++)
{
comm.Parameters.Add(coll[i]);
}
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = procName;
comm.ExecuteNonQuery();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Parameters.Clear();
comm.Dispose();
closeConnection();
}
}
/// <summary>
/// 執(zhí)行存儲過程并返回數(shù)據(jù)集
/// </summary>
/// <param >存儲過程名稱</param>
/// <param >SqlParameter集合</param>
/// <param >DataSet </param>
public static void ExecutePorcedure(string procName, SqlParameter[] coll, ref DataSet ds)
{
SqlCommand comm = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection();
comm.Connection = conn;
for (int i = 0; i < coll.Length; i++)
{
comm.Parameters.Add(coll[i]);
}
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = procName;
comm.ExecuteNonQuery();
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Parameters.Clear();
comm.Dispose();
closeConnection();
}
}
/// <summary>
/// 執(zhí)行Sql查詢語句并返回第一行的第一條記錄,返回值為object 使用時需要拆箱操作 -> Unbox
/// </summary>
/// <param >傳入的Sql語句</param>
/// <returns>object 返回值 </returns>
public static object ExecuteScalar(string sqlstr)
{
object obj = new object();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
obj = comm.ExecuteScalar();
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
return obj;
}
/// <summary>
/// 執(zhí)行Sql查詢語句,同時進行事務(wù)處理
/// </summary>
/// <param >傳入的Sql語句</param>
public static void ExecuteSqlWithTransaction(string sqlstr)
{
SqlTransaction trans;
trans = conn.BeginTransaction();
SqlCommand comm = new SqlCommand();
comm.Transaction = trans;
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
comm.ExecuteNonQuery();
trans.Commit();
}
catch
{
trans.Rollback();
}
finally
{
comm.Dispose();
closeConnection();
}
}
/// <summary>
/// 返回指定Sql語句的SqlDataReader,請注意,在使用后請關(guān)閉本對象,同時將自動調(diào)用closeConnection()來關(guān)閉數(shù)據(jù)庫連接
/// 方法關(guān)閉數(shù)據(jù)庫連接
/// </summary>
/// <param >傳入的Sql語句</param>
/// <returns>SqlDataReader對象</returns>
public static SqlDataReader dataReader(string sqlstr)
{
SqlDataReader dr = null;
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
comm.Dispose();
}
catch
{
try
{
if (dr != null && !dr.IsClosed)
dr.Close();
closeConnection();
}
catch
{
}
}
return dr;
}
/// <summary>
/// 返回指定Sql語句的SqlDataReader,請注意,在使用后請關(guān)閉本對象,同時將自動調(diào)用closeConnection()來關(guān)閉數(shù)據(jù)庫連接
/// 方法關(guān)閉數(shù)據(jù)庫連接
/// </summary>
/// <param >傳入的Sql語句</param>
/// <param >傳入的ref DataReader 對象</param>
public static void dataReader(string sqlstr, ref SqlDataReader dr)
{
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandText = sqlstr;
comm.CommandType = CommandType.Text;
dr = comm.ExecuteReader(CommandBehavior.CloseConnection);
}
catch
{
try
{
if (dr != null && !dr.IsClosed)
dr.Close();
}
catch
{
}
finally
{
comm.Dispose();
closeConnection();
}
}
}
/// <summary>
/// 返回指定Sql語句的DataSet
/// </summary>
/// <param >傳入的Sql語句</param>
/// <returns>DataSet</returns>
public static DataSet dataSet(string sqlstr)
{
DataSet ds = new DataSet();
SqlCommand comm = new SqlCommand();
SqlDataAdapter da = new SqlDataAdapter();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
return ds;
}
/// <summary>
/// 返回指定Sql語句的DataSet
/// </summary>
/// <param >傳入的Sql語句</param>
/// <param >傳入的引用DataSet對象</param>
public static void dataSet(string sqlstr, ref DataSet ds)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
}
/// <summary>
/// 返回指定Sql語句的DataTable
/// </summary>
/// <param >傳入的Sql語句</param>
/// <returns>DataTable</returns>
public static DataTable dataTable(string sqlstr)
{
SqlDataAdapter da = new SqlDataAdapter();
DataTable datatable = new DataTable();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(datatable);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
return datatable;
}
/// <summary>
/// 執(zhí)行帶參數(shù)存儲過程并返回數(shù)據(jù)集合
/// </summary>
/// <param >存儲過程名稱</param>
/// <param >SqlParameterCollection 輸入?yún)?shù)--此處改為SqlParameter對象(kxy 2006-11-11)</param>
/// <returns></returns>
public static DataTable dataTable(string procName, SqlParameter[] parameters)
{
SqlDataAdapter da = new SqlDataAdapter();
DataTable datatable = new DataTable();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.Parameters.Clear();
comm.CommandType = CommandType.StoredProcedure;
comm.CommandText = procName;
foreach (SqlParameter para in parameters)
{
SqlParameter p = (SqlParameter)para;
comm.Parameters.Add(p);
}
da.SelectCommand = comm;
da.Fill(datatable);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
return datatable;
}
/// <summary>
/// 執(zhí)行指定Sql語句,同時給傳入DataTable進行賦值
/// </summary>
/// <param >傳入的Sql語句</param>
/// <param >ref DataTable dt </param>
public static void dataTable(string sqlstr, ref DataTable dt)
{
SqlDataAdapter da = new SqlDataAdapter();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(dt);
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
}
public static DataView dataView(string sqlstr)
{
SqlDataAdapter da = new SqlDataAdapter();
DataView dv = new DataView();
DataSet ds = new DataSet();
SqlCommand comm = new SqlCommand();
try
{
openConnection();
comm.Connection = conn;
comm.CommandType = CommandType.Text;
comm.CommandText = sqlstr;
da.SelectCommand = comm;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
}
catch (Exception e)
{
throw new Exception(e.Message);
}
finally
{
comm.Dispose();
closeConnection();
}
return dv;
}
}