using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.OleDb; namespace Maticsoft.DBUtility { /// <summary> /// 數據訪問基礎類(基於OleDb) /// 能夠用戶能夠修改知足本身項目的須要。 /// </summary> public class DbHelperOleDb { //數據庫鏈接字符串(web.config來配置),能夠動態更改connectionString支持多數據庫. public string connectionString = ""; public DbHelperOleDb(string conn) { this.connectionString = conn; } #region 公用方法 public bool Exists(string strSql, params OleDbParameter[] cmdParms) { object obj = GetSingle(strSql, cmdParms); int cmdresult; if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } if (cmdresult == 0) { return false; } else { return true; } } #endregion #region 執行簡單SQL語句 /// <summary> /// 執行SQL語句,返回影響的記錄數 /// </summary> /// <param name="SQLString">SQL語句</param> /// <returns>影響的記錄數</returns> public int ExecuteSql(string SQLString) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand cmd = new OleDbCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.OleDb.OleDbException E) { connection.Close(); throw new Exception(E.Message); } } } } /// <summary> /// 執行多條SQL語句,實現數據庫事務。 /// </summary> /// <param name="SQLStringList">多條SQL語句</param> public void ExecuteSqlTran(ArrayList SQLStringList) { using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); OleDbCommand cmd = new OleDbCommand(); cmd.Connection = conn; OleDbTransaction tx = conn.BeginTransaction(); cmd.Transaction = tx; try { for (int n = 0; n < SQLStringList.Count; n++) { string strsql = SQLStringList[n].ToString(); if (strsql.Trim().Length > 1) { cmd.CommandText = strsql; cmd.ExecuteNonQuery(); } } tx.Commit(); } catch (System.Data.OleDb.OleDbException E) { tx.Rollback(); throw new Exception(E.Message); } } } /// <summary> /// 執行帶一個存儲過程參數的的SQL語句。 /// </summary> /// <param name="SQLString">SQL語句</param> /// <param name="content">參數內容,好比一個字段是格式複雜的文章,有特殊符號,能夠經過這個方式添加</param> /// <returns>影響的記錄數</returns> public int ExecuteSql(string SQLString, string content) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { OleDbCommand cmd = new OleDbCommand(SQLString, connection); System.Data.OleDb.OleDbParameter myParameter = new System.Data.OleDb.OleDbParameter("@content", OleDbType.VarChar); myParameter.Value = content; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.OleDb.OleDbException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 向數據庫裏插入圖像格式的字段(和上面狀況相似的另外一種實例) /// </summary> /// <param name="strSQL">SQL語句</param> /// <param name="fs">圖像字節,數據庫的字段類型爲image的狀況</param> /// <returns>影響的記錄數</returns> public int ExecuteSqlInsertImg(string strSQL, byte[] fs) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { OleDbCommand cmd = new OleDbCommand(strSQL, connection); System.Data.OleDb.OleDbParameter myParameter = new System.Data.OleDb.OleDbParameter("@fs", OleDbType.Binary); myParameter.Value = fs; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (System.Data.OleDb.OleDbException E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// <summary> /// 執行一條計算查詢結果語句,返回查詢結果(object)。 /// </summary> /// <param name="SQLString">計算查詢結果語句</param> /// <returns>查詢結果(object)</returns> public object GetSingle(string SQLString) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand cmd = new OleDbCommand(SQLString, connection)) { try { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.OleDb.OleDbException e) { connection.Close(); throw new Exception(e.Message); } } } } /// <summary> /// 執行查詢語句,返回OleDbDataReader /// </summary> /// <param name="strSQL">查詢語句</param> /// <returns>OleDbDataReader</returns> public OleDbDataReader ExecuteReader(string strSQL) { OleDbConnection connection = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(strSQL, connection); try { connection.Open(); OleDbDataReader myReader = cmd.ExecuteReader(); return myReader; } catch (System.Data.OleDb.OleDbException e) { throw new Exception(e.Message); } } /// <summary> /// 執行查詢語句,返回DataSet /// </summary> /// <param name="SQLString">查詢語句</param> /// <returns>DataSet</returns> public DataSet Query(string SQLString) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { DataSet ds = new DataSet(); try { connection.Open(); OleDbDataAdapter command = new OleDbDataAdapter(SQLString, connection); command.Fill(ds, "ds"); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } return ds; } } #endregion #region 執行帶參數的SQL語句 /// <summary> /// 執行SQL語句,返回影響的記錄數 /// </summary> /// <param name="SQLString">SQL語句</param> /// <returns>影響的記錄數</returns> public int ExecuteSql(string SQLString, params OleDbParameter[] cmdParms) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand cmd = new OleDbCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } catch (System.Data.OleDb.OleDbException E) { throw new Exception(E.Message); } } } } /// <summary> /// 執行多條SQL語句,實現數據庫事務。 /// </summary> /// <param name="SQLStringList">SQL語句的哈希表(key爲sql語句,value是該語句的OleDbParameter[])</param> public void ExecuteSqlTran(Hashtable SQLStringList) { using (OleDbConnection conn = new OleDbConnection(connectionString)) { conn.Open(); using (OleDbTransaction trans = conn.BeginTransaction()) { OleDbCommand cmd = new OleDbCommand(); try { //循環 foreach (DictionaryEntry myDE in SQLStringList) { string cmdText = myDE.Key.ToString(); OleDbParameter[] cmdParms = (OleDbParameter[])myDE.Value; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); } catch { trans.Rollback(); throw; } } } } /// <summary> /// 執行一條計算查詢結果語句,返回查詢結果(object)。 /// </summary> /// <param name="SQLString">計算查詢結果語句</param> /// <returns>查詢結果(object)</returns> public object GetSingle(string SQLString, params OleDbParameter[] cmdParms) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { using (OleDbCommand cmd = new OleDbCommand()) { try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } catch (System.Data.OleDb.OleDbException e) { throw new Exception(e.Message); } } } } /// <summary> /// 執行查詢語句,返回OleDbDataReader /// </summary> /// <param name="strSQL">查詢語句</param> /// <returns>OleDbDataReader</returns> public OleDbDataReader ExecuteReader(string SQLString, params OleDbParameter[] cmdParms) { OleDbConnection connection = new OleDbConnection(connectionString); OleDbCommand cmd = new OleDbCommand(); try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); OleDbDataReader myReader = cmd.ExecuteReader(); cmd.Parameters.Clear(); return myReader; } catch (System.Data.OleDb.OleDbException e) { throw new Exception(e.Message); } } /// <summary> /// 執行查詢語句,返回DataSet /// </summary> /// <param name="SQLString">查詢語句</param> /// <returns>DataSet</returns> public DataSet Query(string SQLString, params OleDbParameter[] cmdParms) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { OleDbCommand cmd = new OleDbCommand(); PrepareCommand(cmd, connection, null, SQLString, cmdParms); using (OleDbDataAdapter da = new OleDbDataAdapter(cmd)) { DataSet ds = new DataSet(); try { da.Fill(ds, "ds"); cmd.Parameters.Clear(); } catch (System.Data.OleDb.OleDbException ex) { throw new Exception(ex.Message); } return ds; } } } private void PrepareCommand(OleDbCommand cmd, OleDbConnection conn, OleDbTransaction trans, string cmdText, OleDbParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text;//cmdType; if (cmdParms != null) { foreach (OleDbParameter parm in cmdParms) cmd.Parameters.Add(parm); } } #endregion } }
使用實例:web
string connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=d:\\#gklq.mdb;PersistSecurity Info=False"; DbHelperOleDb op = newDbHelperOleDb(connStr); // 初始化實例,須要傳入一個鏈接字符串
/****************************** 執行 一條簡單sql語句 ***************************************/ op.ExecuteSql(" insert into art( kh,xm,xb,chj,zhy,shyd ) values('11111', '站戰爭','男' ,333 ,'計算機','山東' ) ");
/******************************執行事務 ***************************************/ string str1 = "insert into art( kh,xm,xb,chj,zhy,shyd )values( '2222222', '張思','男' ,333 ,'計算機','山東' )"; string str2 = "insert into art( kh,xm,xb,chj,zhy,shyd )values( '3333333', '張思','男' ,333 ,'計算機','山東' )"; ArrayList sqls = newArrayList(); sqls.Add(str1); sqls.Add(str2); op.ExecuteSqlTran(sqls);
/****************************** 執行一條 帶參數的sql語句 ***************************************/ string str = "insert into art( kh,xm,xb,chj,zhy,shyd )values( @kh,@xm,@xb,@chj,@zhy,@shyd )"; OleDbParameter[] paras = { newOleDbParameter("@kh", OleDbType.VarChar, 50), new OleDbParameter("@xm", OleDbType.VarChar, 50), newOleDbParameter("@xb", OleDbType.VarChar, 50), }; paras[0].Value = "730913"; paras[1].Value = "里斯"; paras[2].Value = "女"; int rows = op.ExecuteSql(str, paras);