using System;<br />using System.Windows.Forms;<br />using System.Data;<br />using System.Data.SqlClient;</p><p>namespace DataBaseSpace<br />{<br /> class DataBase<br /> {<br /> // Constructor DataBase<br /> public DataBase() { }</p><p> // Statement Sqlconnection conn<br /> private SqlConnection conn = null;</p><p> #region 開啟資料庫 Open()<br /> /// <summary><br /> /// 開啟資料庫<br /> /// </summary><br /> private void Open()<br /> {<br /> if (conn == null) //第一次為null<br /> {<br /> // 讀取App.config檔案的資料庫連接串<br /> string SqlStr = System.Configuration.ConfigurationSettings.AppSettings["ConnSqlStr"].ToString();<br /> conn = new SqlConnection(SqlStr);<br /> }<br /> // 判斷資料庫狀態是否關閉<br /> if (conn.State == ConnectionState.Closed)<br /> {<br /> conn.Open(); // 開啟資料庫<br /> }<br /> }<br /> #endregion</p><p> #region 關閉資料庫,並釋放資源 Close() Dispose()<br /> /// <summary><br /> /// 關閉資料庫,並釋放資源<br /> /// </summary><br /> private void Close()<br /> {<br /> if (conn != null)<br /> {<br /> // 關閉資料庫連接<br /> conn.Close();<br /> // null<br /> conn = null;<br /> // 釋放資源<br /> conn.Dispose();<br /> }<br /> }<br /> #endregion</p><p> #region 把參數轉化為Parameter參數 Parameter<br /> /// <summary><br /> /// 把參數轉化為Parameter參數<br /> /// </summary><br /> /// <param name="dbpara">資料表欄位名稱 (如: uid , username)</param><br /> /// <param name="dbtype">資料表欄位類型 (如: int ,varchar)</param><br /> /// <param name="dbsize">資料表欄位長度 (如: 50 , 225)</param><br /> /// <param name="dbvalue">參數值 (如: userinfo.uid)</param><br /> /// <returns>返回新的Parameter對象</returns><br /> public SqlParameter MarkPara(string dbpara , SqlDbType dbtype , int dbsize , object dbvalue)<br /> {<br /> // 對象<br /> SqlParameter Para;<br /> if (dbsize > 0)<br /> {<br /> Para = new SqlParameter(dbpara, dbtype, dbsize);<br /> }<br /> else<br /> {<br /> Para = new SqlParameter(dbpara, dbtype);<br /> }<br /> // 負值<br /> Para.Value = dbvalue;<br /> //返回SqlParameter<br /> return Para;<br /> }<br /> #endregion</p><p> #region 執行命令文本 SqlCommand()<br /> /// <summary><br /> /// 建立SqlCommand命令文本,執行命令文本<br /> /// </summary><br /> /// <param name="sqlstr">Sql語句 (如:insert into xxx (uid ,name) value (@uid , @name)</param><br /> /// <param name="Para">命令文本參數</param><br /> /// <returns>返回SqlCommand對象</returns><br /> private SqlCommand CreateCommand(string sqlstr , SqlParameter[] Para)<br /> {<br /> // 開啟資料庫<br /> this.Open();<br /> //<br /> SqlCommand cmd = new SqlCommand(sqlstr, conn);<br /> // 執行命令類型: 命令文本<br /> cmd.CommandType = CommandType.Text;<br /> // Para 是否為空白<br /> if (Para != null)<br /> {<br /> // 迴圈輸出Para參數<br /> foreach (SqlParameter p in Para)<br /> {<br /> // 添加para參數到cmd.Parameter裡<br /> cmd.Parameters.Add(p);<br /> }<br /> }<br /> // 返回SqlCommand<br /> return cmd;<br /> }<br /> #endregion</p><p> #region 建立SqlDataAdapter來執行命令文本 SqlDataAdapter<br /> /// <summary><br /> /// 建立SqlDataAdapter來執行命令文本 SqlDataAdapter<br /> /// </summary><br /> /// <param name="SqlStr">Sql 語句 (如:insert into xx(uid,name) values(@uid,@name)</param><br /> /// <param name="Para">命令參數 (如 : userinto.uid)</param><br /> /// <returns>返回SqlDataAdapter對象</returns><br /> private SqlDataAdapter CreateDataAdapter(string SqlStr, SqlParameter[] Para)<br /> {<br /> // 開啟資料庫<br /> this.Open();<br /> SqlDataAdapter per = new SqlDataAdapter(SqlStr,conn);<br /> // 執行命令類型: 文本類型<br /> per.SelectCommand.CommandType = CommandType.Text;<br /> if (Para != null)<br /> {<br /> // 迴圈輸出Para<br /> foreach (SqlParameter p in Para)<br /> {<br /> // 添加 p 到per中<br /> per.SelectCommand.Parameters.Add(p);<br /> }<br /> }<br /> // 返回SqlDataadapter<br /> return per;<br /> }<br /> #endregion</p><p> #region 執行命令文本,返回一個int類型<br /> /// <summary><br /> /// 執行命令文本,返回int類型(儲存過程<br /> /// </summary><br /> /// <param name="SqlStr">Sql語句 (如:select * from xxx where (uid = @uid)</param><br /> /// <param name="Para">參數值</param><br /> /// <returns>返回 int 類型</returns><br /> public int RunCmd(string SqlStr, SqlParameter[] Para)<br /> {<br /> SqlCommand cmd = CreateCommand(SqlStr, Para);<br /> try<br /> {<br /> return (int)cmd.ExecuteNonQuery();<br /> }<br /> catch (SqlException ex) //捕獲異常<br /> {<br /> MessageBox.Show("語句執行失敗 --> " + ex.Errors.ToString(), "執行語句資訊提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);<br /> return -1;<br /> }<br /> finally<br /> {<br /> this.Close();<br /> }<br /> }<br /> /// <summary><br /> /// 執行命令文本,返回int類型<br /> /// </summary><br /> /// <param name="SqlStr">Sql語句 (如:select * from tdxxx where (uid = xxx)</param><br /> /// <returns>返回 int 類型</returns><br /> public int RunCmd(string SqlStr)<br /> {<br /> SqlCommand cmd = CreateCommand(SqlStr, null);<br /> try<br /> {<br /> cmd.ExecuteNonQuery();<br /> return 1;<br /> }<br /> catch (SqlException ex) //捕獲異常<br /> {<br /> MessageBox.Show("語句執行失敗 --> " + ex.Errors.ToString(), "執行語句資訊提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);<br /> return -1;<br /> }<br /> finally // 釋放資源<br /> {<br /> this.Close();<br /> }</p><p> }<br /> #endregion</p><p> #region 執行命令文本,返回DataSet類型<br /> /// <summary><br /> /// 執行命令文本,返回DataSet類型(儲存過程<br /> /// </summary><br /> /// <param name="SqlStr">Sql語句 (如:insert into xx(uid,name) values(@uid,@name)</param><br /> /// <param name="Para">命令參數值</param><br /> /// <param name="tdName">表名</param><br /> /// <returns>返回DataSet類型</returns><br /> public DataSet RunCmdReturnDS(string SqlStr, SqlParameter[] Para , string tdName)<br /> {<br /> SqlDataAdapter per = CreateDataAdapter(SqlStr, Para);<br /> DataSet ds = new DataSet();<br /> try<br /> {<br /> per.Fill(ds, tdName);<br /> return ds;<br /> }<br /> catch (SqlException ex) //捕獲異常<br /> {<br /> MessageBox.Show("語句執行失敗 --> " + ex.Errors.ToString(), "執行語句資訊提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);<br /> return null;<br /> }<br /> finally // 釋放資源<br /> {<br /> this.Close();<br /> }<br /> }<br /> /// <summary><br /> /// 執行命令文本,返回DataSet類型<br /> /// </summary><br /> /// <param name="SqlStr">Sql語句 (如:insert into xx(uid,name) values(aaa,bb)</param><br /> /// <param name="tdName">表名</param><br /> /// <returns>返回DataSet類型</returns><br /> public DataSet RunCmdReturnDS(string SqlStr, string tdName)<br /> {<br /> SqlDataAdapter per = CreateDataAdapter(SqlStr, null);<br /> DataSet ds = new DataSet();<br /> try<br /> {<br /> per.Fill(ds, tdName);<br /> return ds;<br /> }<br /> catch (SqlException ex) //捕獲異常<br /> {<br /> MessageBox.Show("語句執行失敗 --> " + ex.Errors.ToString(), "執行語句資訊提示!", MessageBoxButtons.OK, MessageBoxIcon.Error);<br /> return null;<br /> }<br /> finally // 釋放資源<br /> {<br /> this.Close();<br /> }<br /> }<br /> #endregion</p><p> }//class </p><p>}//namespace</p><p>/// 總結: -----------------------儲存過程-------------------------------<br />/// 1、記得在使用web開發的時候,只要使用DataAdapter這個命令時,可以不用調用conn.Open() 開啟資料庫,而這裡,是不可以,必須調用Open(),否責........<br />/// 2、程式開發完後,可以把try....catch...finally...這些捕獲異常掉去,可以提高程式效能,更多的判斷放在UI層<br />/// 3、<br />/// 4、<br />/// 5、<br />/// 6、<br />/// 7、<br />/// 8、自用(此程式碼,</p><p>