using System; using System.Collections; using System.Collections.Specialized; using System.Data; using System.Data.OleDb; using System.Configuration; namespace Ant.Data { /// /// Copyright (C) 2004-2008 LiTianPing ///数据访问基础类(基于OleDb) ///可以用户可以修改满足自己项目的需要。 /// public abstract class DbHelperOleDb : BaseDataAccess { //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库. //public static string connectionString = PubConstant.ConnectionString; public static string connectionString = ConfigurationManager.AppSettings["DBConnectionString"].ToString(); public DbHelperOleDb() { } /// ///执行SQL语句,返回影响的记录数 /// ///SQL语句 ///影响的记录数 public static 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); } } } } /// ///执行多条SQL语句,实现数据库事务。 /// ///多条SQL语句 public static 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); } } } /// ///执行带一个存储过程参数的的SQL语句。 /// ///SQL语句 ///参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加 ///影响的记录数 public static 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(); } } } /// ///向数据库里插入图像格式的字段(和上面情况类似的另一种实例) /// ///SQL语句 ///图像字节,数据库的字段类型为image的情况 ///影响的记录数 public static 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(); } } } /// ///执行一条计算查询结果语句,返回查询结果(object)。 /// ///计算查询结果语句 ///查询结果(object) public static 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); } } } } /// ///执行查询语句,返回OleDbDataReader /// ///查询语句 ///OleDbDataReader public static 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); } } /// ///执行查询语句,返回DataSet /// ///查询语句 ///DataSet public static 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; } } /// ///执行SQL语句,返回影响的记录数 /// ///SQL语句 ///影响的记录数 public static 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); } } } } /// ///执行多条SQL语句,实现数据库事务。 /// ///SQL语句的哈希表(key为sql语句,value是该语句的OleDbParameter[]) public static 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; } } } } /// ///执行一条计算查询结果语句,返回查询结果(object)。 /// ///计算查询结果语句 ///查询结果(object) public static 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); } } } } /// ///执行查询语句,返回OleDbDataReader /// ///查询语句 ///OleDbDataReader public static 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); } } /// ///执行查询语句,返回DataSet /// ///查询语句 ///DataSet public static 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 static 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); } } /// ///执行存储过程 /// ///存储过程名 ///param name="parameters">存储过程参数 ///OleDbDataReader public static OleDbDataReader RunProcedure(string storedProcName, IDataParameter[] parameters) { OleDbConnection connection = new OleDbConnection(connectionString); OleDbDataReader returnReader; connection.Open(); OleDbCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.CommandType = CommandType.StoredProcedure; returnReader = command.ExecuteReader(); return returnReader; } /// ///执行存储过程 /// ///存储过程名 ///存储过程参数 ///DataSet结果中的表名 ///DataSet public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { DataSet dataSet = new DataSet(); connection.Open(); OleDbDataAdapter sqlDA = new OleDbDataAdapter(); sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters); sqlDA.Fill(dataSet, tableName); connection.Close(); return dataSet; } } /// ///构建OleDbCommand 对象(用来返回一个结果集,而不是一个整数值) /// ///数据库连接 ///存储过程名 ///存储过程参数 ///OleDbCommand private static OleDbCommand BuildQueryCommand(OleDbConnection connection, string storedProcName, IDataParameter[] parameters) { OleDbCommand command = new OleDbCommand(storedProcName, connection); command.CommandType = CommandType.StoredProcedure; foreach (OleDbParameter parameter in parameters) { command.Parameters.Add(parameter); } return command; } /// ///执行存储过程,返回影响的行数 /// ///存储过程名 ///存储过程参数 ///影响的行数 /// public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected) { using (OleDbConnection connection = new OleDbConnection(connectionString)) { int result; connection.Open(); OleDbCommand command = BuildIntCommand(connection, storedProcName, parameters); rowsAffected = command.ExecuteNonQuery(); result = (int)command.Parameters["ReturnValue"].Value; //Connection.Close(); return result; } } /// ///创建OleDbCommand 对象实例(用来返回一个整数值) /// ///存储过程名 ///存储过程参数 ///OleDbCommand 对象实例 private static OleDbCommand BuildIntCommand(OleDbConnection connection, string storedProcName, IDataParameter[] parameters) { OleDbCommand command = BuildQueryCommand(connection, storedProcName, parameters); command.Parameters.Add(new OleDbParameter("ReturnValue", OleDbType.Integer, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); return command; } } }