/// <summary>
/// 得到數據連接
/// </summary>
/// <returns>返回連接字符串</returns>
private string getConnectionString()
{
string strConn = ConfigurationSettings.AppSettings["ConnectionString"].ToString();
return strConn;
}
二、執行操作
/// <summary>
/// 執行sqlCommand
/// </summary>
/// <param name="sqlCommand">待執行的sql語句或存儲過程名</param>
/// <param name="htParameters">參數集</param>
/// <returns>數據集</returns>
public DataTable ExecuteSqlCommand(string sqlCommand,Hashtable htParameters)
{
string strConn = this.getConnectionString();
SqlConnection sqlConn = new SqlConnection(strConn);
SqlTransaction sqlTran = sqlConn.BeginTransaction();
DataTable dtReturn = new DataTable();
try
{
if (sqlConn.State == ConnectionState.Closed)
{
sqlConn.Open();
}
SqlCommand sqlCom = sqlConn.CreateCommand();
sqlCom.CommandType = CommandType.Text;
sqlCom.CommandText = sqlCommand;
/*
//當sqlCommand爲存儲過程名時,應爲如下所示
sqlCom.CommandType = CommandType.StoredProcedure;
sqlCom.CommandText = sqlCommand;
*/
/*
//以下爲通過Hashtable對sqlcommand賦參的三種方法
*/
//
//
//方法一、通過IDictionaryEnumerator接口賦值
//
IDictionaryEnumerator iDictionary = htParameters.GetEnumerator();
while (iDictionary.MoveNext())
{
object objKey = iDictionary.Key;
sqlCom.Parameters.Add(objKey.ToString());
sqlCom.Parameters[objKey.ToString()].Value = iDictionary.Value;
}
//
//方法二、通過OBJECT賦值
//
foreach (object objKeys in htParameters.Keys)
{
sqlCom.Parameters.Add(objKeys);
sqlCom.Parameters[objKeys.ToString()].Value = htParameters[objKeys];
}
//
//方法三、通過DictionaryEntry賦值
//
foreach (DictionaryEntry dEntry in htParameters)
{
sqlCom.Parameters.Add(dEntry.Key);
sqlCom.Parameters[dEntry.Key.ToString()].Value = dEntry.Value;
}
/*
//以下爲返回結果數據集以DataTable返回的兩種方法
//
//DataReader數據不在內存中緩存,適合於檢索大量數據
//
*/
//
//方法一、以SqlDataReader的形式返回DataTable數據集
//
SqlDataReader sqlReader = sqlCom.ExecuteReader();
if (sqlReader.HasRows)
{
dtReturn = sqlReader.GetSchemaTable();
}
//
//方法二、以DataSet的形式返回DataTable數據集
//
SqlDataAdapter sqlData = new SqlDataAdapter(sqlCom);
DataSet dtSet = new DataSet();
sqlData.Fill(dtSet);
dtReturn = dtSet.Tables[0];
}
catch (Exception ce)
{
sqlTran.Rollback();
throw new ApplicationException(ce.Message.ToString());
}
finally
{
sqlTran.Commit();
if (sqlConn.State == ConnectionState.Open)
{
sqlConn.Close();
}
}
return dtReturn;
}