下面的代碼來自於網絡,只是把連接池設置和存儲過程加在一起了
public class DbConn
{private const int MaxPool = 30; //最大連接數
private const int MinPool=5;//最小連接數
private const bool Asyn_Process=true;//設置異步訪問數據庫
private const bool Mars=true;//在單個連接上得到和管理多個、僅向前引用和只讀的結果集(ADO.NET2.0)
private const int Conn_Timeout=15;//設置連接等待時間
private const int Conn_Lifetime=15;//設置連接的生命週期
private string ConnString="";//連接字符串
private SqlConnection SqlDrConn=null;//連接對象
public void SetConnString(string server,string dbName,string user,string pwd)
{
ConnString = "Server=" + server + ";"
+ "Database=" + dbName + ";"
+ "User ID=" + user + ";"
+ "Password=" + pwd + ";"
+ "Max Pool Size=" + MaxPool + ";"
+ "Min Pool Size=" + MinPool + ";"
+ "Connect Timeout=" + Conn_Timeout + ";"
+ "Connection Lifetime=" + Conn_Lifetime + ";"
+ "Async=" + Asyn_Process + ";"
+ "Integrated Security=sspi"; //當爲 false 時,將在連接中指定用戶 ID 和密碼。當爲 true 時,將使用當前的 Windows 帳戶憑據進行身份驗證(用戶名和密碼無效)。
// 可識別的值爲 true、false、yes、no 以及與 true 等效的 sspi(強烈推薦)。
SqlDrConn = new SqlConnection(ConnString);
}
public DataTable GetDataReader(string StrSql)//數據查詢
{
//當連接處於打開狀態時關閉,然後再打開,避免有時候數據不能及時更新
if(SqlDrConn.State==ConnectionState.Open)
{
SqlDrConn.Close();
}
try
{
SqlDrConn.Open();
SqlCommand SqlCmd=new SqlCommand(StrSql,SqlDrConn);
SqlDataReader SqlDr=SqlCmd.ExecuteReader();
if(SqlDr.HasRows)
{
DataTable dt=new DataTable();
//讀取SqlDataReader裏的內容
dt.Load(SqlDr);
//關閉對象和連接
SqlDr.Close();
SqlDrConn.Close();
return dt;
}
return null;
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
return null;
}
finally
{
SqlDrConn.Close();
}
}
#region 執行不帶參數的存儲過程,返回存儲過程返回值
/// <summary>
/// 執行存儲過程
/// </summary>
/// <param name="procName">不帶參數的存儲過程的名稱</param>
/// <returns>返回存儲過程返回值</returns>
public int RunProc(string procName)
{
SqlCommand cmd = CreateCommand(procName, null);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
}
#endregion
#region 執行帶參數的存儲過程,返回存儲過程返回值
/// <summary>
/// 執行存儲過程 ,已經帶有關閉操作
/// </summary>
/// <param name="procName">帶參數存儲過程名稱</param>
/// <param name="prams">存儲過程所需參數</param>
/// <returns>返回存儲過程返回值</returns>
public int RunProc(string procName, SqlParameter[] prams)
{
SqlCommand cmd = CreateCommand(procName, prams);
cmd.ExecuteNonQuery();
this.Close();
return (int)cmd.Parameters["ReturnValue"].Value;
}
#endregion
#region 執行不帶參數的存儲過程,通過輸出參數返回SqlDataReader對象
/// <summary>
/// 執行存儲過程 ,不帶有關閉操作,使用完後,請注意關閉連接,避免資源浪費
/// </summary>
/// <param name="procName">不帶參數的存儲過程的名稱</param>
/// <param name="dataReader">通過輸出參數返回SqlDataReader對象</param>
public void RunProc(string procName, out SqlDataReader dataReader)
{
SqlCommand cmd = CreateCommand(procName, null);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
#endregion
#region 執行帶參數的存儲過程,通過輸出參數返回SqlDataReader對象
/// <summary>
/// 執行存儲過程 ,不帶有關閉操作,使用完後,請注意關閉連接,避免資源浪費
/// </summary>
/// <param name="procName">帶參數的存儲過程的名稱</param>
/// <param name="prams">存儲過程所需參數</param>
/// <param name="dataReader">通過輸出參數返回SqlDataReader對象</param>
public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader)
{
SqlCommand cmd = CreateCommand(procName, prams);
dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
}
#endregion
#region 創建SqlCommand對象
/// <summary>
/// 創建一個SqlCommand對象以此來執行存儲過程 ,不帶有關閉操作,使用完後,請注意關閉連接,避免資源浪費
/// </summary>
/// <param name="procName">存儲過程的名稱</param>
/// <param name="prams">存儲過程所需參數</param>
/// <returns>返回SqlCommand對象</returns>
private SqlCommand CreateCommand(string procName, SqlParameter[] prams)
{
// 確認打開連接
Open();
SqlCommand cmd = new SqlCommand(procName, SqlDrConn);
cmd.CommandType = CommandType.StoredProcedure;
// 依次把參數傳入存儲過程
if (prams != null)
{
foreach (SqlParameter parameter in prams)
cmd.Parameters.Add(parameter);
}
// 加入返回參數
cmd.Parameters.Add(
new SqlParameter("ReturnValue", SqlDbType.Int, 4,
ParameterDirection.ReturnValue, false, 0, 0,
string.Empty, DataRowVersion.Default, null));
return cmd;
}
#endregion
#region 打開數據庫連接
/// <summary>
/// 打開數據庫連接.
/// </summary>
private void Open()
{
// 打開數據庫連接
if (SqlDrConn == null)
{
SqlDrConn = new SqlConnection(ConnString);
}
else
{
//當連接處於打開狀態時關閉,然後再打開,避免有時候數據不能及時更新
if (SqlDrConn.State == ConnectionState.Open)
{
SqlDrConn.Close();
}
}
SqlDrConn.Open();
}
#endregion
#region 關閉數據庫連接
/// <summary>
/// 關閉數據庫連接
/// </summary>
public void Close()
{
if (SqlDrConn != null)
SqlDrConn.Close();
}
#endregion
#region 釋放資源
/// <summary>
/// 釋放資源
/// </summary>
public void Dispose()
{
// 確認連接是否已經關閉
if (SqlDrConn != null)
{
SqlDrConn.Dispose();
SqlDrConn = null;
}
}
#endregion
#region 傳入輸入參數
/// <summary>
/// 傳入輸入參數
/// </summary>
/// <param name="ParamName">存儲過程參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <param name="Value">參數值</param>
/// <returns>新的 parameter 對象</returns>
public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
}
#endregion
#region 傳入輸出參數
/// <summary>
/// 傳入輸出參數
/// </summary>
/// <param name="ParamName">存儲過程參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <returns>新的 parameter 對象</returns>
public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
}
#endregion
#region 傳入返回值參數
/// <summary>
/// 傳入返回值參數
/// </summary>
/// <param name="ParamName">存儲過程參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <returns>新的 parameter 對象</returns>
public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size)
{
return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
}
#endregion
#region 生成存儲過程參數
/// <summary>
/// 生成存儲過程參數
/// </summary>
/// <param name="ParamName">存儲過程參數名稱</param>
/// <param name="DbType">參數類型</param>
/// <param name="Size">參數大小</param>
/// <param name="Direction">參數方向</param>
/// <param name="Value">參數值</param>
/// <returns>新的 parameter 對象</returns>
public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
SqlParameter param;
if (Size > 0)
param = new SqlParameter(ParamName, DbType, Size);
else
param = new SqlParameter(ParamName, DbType);
param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value;
return param;
}
#endregion
#region 將DataReader 轉爲 DataTable
/// <summary>
/// 將DataReader 轉爲 DataTable
/// </summary>
/// <param name="DataReader">DataReader</param>
public static DataTable ConvertDataReaderToDataTable(SqlDataReader reader)
{
try
{
DataTable objDataTable = new DataTable();
int intFieldCount = reader.FieldCount;
for (int intCounter = 0; intCounter < intFieldCount; ++intCounter)
{
objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter));
}
objDataTable.BeginLoadData();
object[] objValues = new object[intFieldCount];
while (reader.Read())
{
reader.GetValues(objValues);
objDataTable.LoadDataRow(objValues, true);
}
reader.Close();
objDataTable.EndLoadData();
return objDataTable;
}
catch (Exception ex)
{
throw new Exception("轉換DataReader爲DataTable出錯!", ex);
}
}
#endregion
#region 數字判定
/// <summary>
/// 數字判定
/// </summary>
/// <param name="str">字符串參數</param>
public static bool IsNumber(String strNumber)
{
Regex objNotNumberPattern = new Regex("[^0-9.-]");
Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*");
Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*");
String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$";
String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$";
Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")");
return !objNotNumberPattern.IsMatch(strNumber) &&
!objTwoDotPattern.IsMatch(strNumber) &&
!objTwoMinusPattern.IsMatch(strNumber) &&
objNumberPattern.IsMatch(strNumber);
}
#endregion
}
用SqlDataReader獲取DataTable
public DataTable Convertdrtodt(SqlDataReader dr){
DataTable dataTable = new DataTable();//建一個新的實例
for(int i=0; i<dr.FieldCount;i++)
{
DataColumn mydc = new DataColumn();//關鍵的一步
mydc.DataType = dr.GetFieldType(i);
mydc.ColumnName = dr.GetName(i);
dataTable.Columns.Add(mydc);//關鍵的第二步
}
while (dr.Read())
{
DataRow mydr = dataTable.NewRow();//關鍵的第三步
for (int i = 0; i < dr.FieldCount; i++)
{
mydr[i] = dr[i].ToString();
}
dataTable.Rows.Add(mydr);//關鍵的第四步
mydr = null;
}
dr.Close();
return (dataTable);//別忘了要返回datatable,否則出錯
}