using MySql.Data.MySqlClient; using System; using System.Collections; using System.Collections.Generic; using System.Data; using System.Text; namespace FangYar.Common { public class MySqlHelper { /// /// 数据库连接字符串 /// public static string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["MySqlConnString"].ConnectionString; //public static string connectionString = ""; #region /// /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列 /// /// ///例如: /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// ///一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 用 Convert.To{Type}把类型转换为想要的 public static object ExecuteScalar(CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } catch (Exception ex) { return "0"; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行Sql并返回受影响行数 /// /// Sql语句 /// 参数 /// 受影响行数 public static int Execute(string SQLString)//Execute(string sql,) { return ExecuteSql(SQLString); } /// /// 执行Sql并返回受影响行数 /// /// Sql语句 /// 数据库连接字符串 /// 受影响行数 public static int Execute(string SQLString, string conStr)//Execute(string sql,) { return ExecuteSql_ConStr(SQLString, conStr); } /// /// 执行Sql并返回受影响行数 /// /// Sql语句 /// 参数 /// 受影响行数 public static int Execute(string SQLString, params MySqlParameter[] cmdParms)//Execute(string sql,) { return ExecuteSql(SQLString, cmdParms); } /// /// 查询数据返回DataReader数据 /// /// /// public MySqlDataReader GetDataReader(string SQLString) { return ExecuteReader(SQLString); } /// /// 查询数据返回DataReader数据 /// /// /// /// public MySqlDataReader GetDataReader(string SQLString, params MySqlParameter[] cmdParms) { return ExecuteReader(SQLString, cmdParms); } /// /// 得到一个字段的值 /// /// /// public string GetFieldValue(string sql) { return ExecuteScalar(sql); } /// /// 得到一个字段的值 /// /// /// /// public string GetFieldValue(string sql, MySqlParameter[] parameter) { return ExecuteScalar(sql, parameter); } /// /// 得到一个字段的值 /// /// /// public string ExecuteScalar(string sql) { using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { conn.Open(); using (MySqlCommand cmd = new MySqlCommand(sql, conn)) { object obj = cmd.ExecuteScalar(); //cmd.Prepare(); return obj != null ? obj.ToString() : string.Empty; } } catch (Exception ex) { return ""; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } } /// /// 得到一个字段的值 /// /// /// public string ExecuteScalar(string sql, MySqlParameter[] parameter) { using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { conn.Open(); using (MySqlCommand cmd = new MySqlCommand(sql, conn)) { if (parameter != null && parameter.Length > 0) cmd.Parameters.AddRange(parameter); object obj = cmd.ExecuteScalar(); cmd.Parameters.Clear(); //cmd.Prepare(); return obj != null ? obj.ToString() : string.Empty; } } catch (Exception ex) { return ""; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } } /// /// 给定连接的数据库用假设参数执行一个sql命令(不返回数据集) /// /// 一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 执行命令所影响的行数 public static int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } catch (Exception ex) { return 0; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } } /// ///使用现有的SQL事务执行一个sql命令(不返回数据集) /// /// ///举例: /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// /// 一个现有的事务 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 执行命令所影响的行数 public static int ExecuteNonQuery(MySqlTransaction trans, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } /// /// 用执行的数据库连接执行一个返回数据集的sql命令 /// /// /// 举例: /// MySqlDataReader r = ExecuteReader(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// /// 一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 包含结果的读取器 public static MySqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); MySqlConnection conn = new MySqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); MySqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return reader; } catch { conn.Close(); throw; } } /// /// 返回DataSet /// /// 一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// public static DataSet GetDataSet(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); MySqlConnection conn = new MySqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); MySqlDataAdapter adapter = new MySqlDataAdapter(); adapter.SelectCommand = cmd; DataSet ds = new DataSet(); adapter.Fill(ds); cmd.Parameters.Clear(); conn.Close(); return ds; } catch (Exception e) { throw e; } } /// /// 用指定的数据库连接字符串执行一个命令并返回一个数据表 /// ///一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 public static DataTable GetDataTable(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); MySqlConnection conn = new MySqlConnection(connectionString); try { PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); MySqlDataAdapter adapter = new MySqlDataAdapter(); adapter.SelectCommand = cmd; DataTable ds = new DataTable(); adapter.Fill(ds); cmd.Parameters.Clear(); conn.Close(); return ds; } catch (Exception e) { throw e; } } /// /// 用指定的数据库连接字符串执行一个命令并返回一个数据集的第一列 /// /// ///例如: /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// ///一个有效的连接字符串 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 用 Convert.To{Type}把类型转换为想要的 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } } /// /// 返回插入值ID /// /// /// /// /// /// public static object ExecuteNonExist(string connectionString, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteNonQuery(); return cmd.LastInsertedId; } } /// /// 用指定的数据库连接执行一个命令并返回一个数据集的第一列 /// /// /// 例如: /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new MySqlParameter("@prodid", 24)); /// /// 一个存在的数据库连接 /// 命令类型(存储过程, 文本, 等等) /// 存储过程名称或者sql命令语句 /// 执行命令所用参数的集合 /// 用 Convert.To{Type}把类型转换为想要的 public static object ExecuteScalar(MySqlConnection connection, CommandType cmdType, string cmdText, params MySqlParameter[] commandParameters) { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); object val = cmd.ExecuteScalar(); cmd.Parameters.Clear(); return val; } #endregion #region Oracle中使用方法 #region 分页查询 /// /// 分页无排序 /// /// 页面索引 /// 页面大小 /// 表名 /// 查询条件 /// public static DataTable QueryPage(int PageIndex, int PageSize, string TableName, string strwhere) { int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT t.* FROM " + TableName + " t where "); if (strwhere != "") { strSql.Append(strwhere + " and "); } strSql.Append(" limit " + startnum + ", " + PageSize); return QueryTable(strSql.ToString()); } /// /// 分页有排序 /// /// 页面索引 /// 页面大小 /// 表名 /// 查询条件 /// /// 排序 /// public static DataTable QueryPage(int PageIndex, int PageSize, string TableName, string strwhere, string order) { int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append("SELECT t.* FROM " + TableName + " t "); if (strwhere != null && strwhere != "") { strSql.Append(" where " + strwhere); } if (!string.IsNullOrWhiteSpace(order)) { strSql.Append(" ORDER BY " + order); } startnum = startnum < 0 ? 0 : startnum; strSql.Append(" limit " + startnum + ", " + PageSize); return QueryTable(strSql.ToString()); } public static DataTable QueryJoinPage(int PageIndex, int PageSize, string strwhere, string order) { int startnum = (PageIndex - 1) * PageSize; StringBuilder strSql = new StringBuilder(); strSql.Append(@"SELECT t.ID ,t.TITLE,t.CONTENT ,t.SENDER ,t.SENDERNAME,t.SENDTIME ,t.TASKID ,t.TYPE ,t.ATTACHFILE ,t.READTIME ,t.CATEGORY , t.ISPUBLIC ,t.DIGEST ,t.SOURCE ,t.UPDATETIME ,record.ID as RECORDID,record.RECEIVER ,record.RECEIVERNAME ,record.STATUS FROM TBL_SYS_NOTICE t LEFT JOIN TBL_SYS_NOTICESENDRECORD record ON t.ID = record.NOTICEID "); if (strwhere != null && strwhere != "") { strSql.Append(" where " + strwhere); } if (order != null && order != "") { strSql.Append(" ORDER BY " + order); } startnum = startnum < 0 ? 0 : startnum; strSql.Append(" limit " + startnum + ", " + PageSize); return QueryTable(strSql.ToString()); } #endregion #region 公用方法 /// /// 获取记录数 /// /// /// public static int GetCount(string sql) { object obj = GetSingle(sql); if (obj == null) { return 0; } else { return int.Parse(obj.ToString()); } } /// /// 获取记录数 /// /// 查询条件 /// 表名 /// 记录数 public static int GetCount(string strwhere, string TableName) { string strsql = string.Format("select count(*) from {0} {1}", TableName, strwhere); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } /// /// 获取字段的最大值 /// /// 字段名 /// 表名 /// 字段最大值 public static int GetMaxID(string FieldName, string TableName) { string strsql = string.Format("select max({0})+1 from {1}", FieldName, TableName); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return int.Parse(obj.ToString()); } } /// /// 获取字段的最大值 /// /// 字段名 /// 表名 /// where条件 /// 字段最大值 public static long GetMaxID(string FieldName, string TableName, string strWhere) { string strsql = string.Format("select max({0})+1 from {1} where 1=1 {2}", FieldName, TableName, strWhere); object obj = GetSingle(strsql); if (obj == null) { return 1; } else { return Convert.ToInt64(obj.ToString()); } } /// /// 根据指定Sql语句查询是否存在 /// /// 要执行的Sql语句 /// 存在返回true,不存在返回false public static bool Exists(string strSql) { object obj = GetSingle(strSql); int cmdresult; if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { cmdresult = 0; } else { cmdresult = int.Parse(obj.ToString()); } return cmdresult == 0 ? false : true; } /// /// 根据指定Sql语句及参数查询是否存在 /// /// 要执行的Sql语句(包含参数值的标识) /// 参数值数组 /// 存在返回true,不存在返回false public static bool Exists(string strSql, params MySqlParameter[] 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语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { using (MySqlCommand cmd = new MySqlCommand(SQLString, connection)) { try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (Exception E) { connection.Close(); //throw new Exception(E.Message); return 0; } } } catch (Exception ex) { return 0; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 数据库连接字符串 /// 影响的记录数 public static int ExecuteSql_ConStr(string SQLString, string conStr) { using (MySqlConnection connection = new MySqlConnection(conStr)) { try { using (MySqlCommand cmd = new MySqlCommand(SQLString, connection)) { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } } catch (Exception E) { connection.Close(); //throw new Exception(E.Message); return 0; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public static bool ExecuteSqlTran(List SQLStringList) { var _result = false; using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = connection; MySqlTransaction tx = connection.BeginTransaction(); cmd.Transaction = tx; foreach (var strSql in SQLStringList) { if (strSql.Trim().Length > 1) { cmd.CommandText = strSql; cmd.ExecuteNonQuery(); } } tx.Commit(); _result = true; } catch (Exception E) { //tx.Rollback(); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } return _result; } /// /// 执行多条SQL语句,实现数据库事务。 /// /// 多条SQL语句 public static void ExecuteSqlTran(ArrayList SQLStringList) { using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; MySqlTransaction 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 (Exception E) { tx.Rollback(); throw new Exception(E.Message); } } } /// /// 执行带一个存储过程参数的的SQL语句。 /// /// SQL语句 /// 参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加 /// 影响的记录数 public static int ExecuteSql(string SQLString, string content) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { MySqlCommand cmd = new MySqlCommand(SQLString, connection); MySqlParameter myParameter = new MySqlParameter("@content", MySqlDbType.VarChar); myParameter.Value = content; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (Exception E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例) /// /// SQL语句 /// 图像字节,数据库的字段类型为image的情况 /// 影响的记录数 public static int ExecuteSqlInsertImg(string strSQL, byte[] fs) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { MySqlCommand cmd = new MySqlCommand(strSQL, connection); MySqlParameter myParameter = new MySqlParameter("@fs", MySqlDbType.LongBlob); myParameter.Value = fs; cmd.Parameters.Add(myParameter); try { connection.Open(); int rows = cmd.ExecuteNonQuery(); return rows; } catch (Exception E) { throw new Exception(E.Message); } finally { cmd.Dispose(); connection.Close(); } } } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public static object GetSingle(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { using (MySqlCommand cmd = new MySqlCommand(SQLString, connection)) { connection.Open(); object obj = cmd.ExecuteScalar(); if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value))) { return null; } else { return obj; } } } catch (Exception e) { connection.Close(); //throw new Exception(e.Message); return "0"; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// /// 查询语句 /// MySqlDataReader public static MySqlDataReader ExecuteReader(string strSQL) { MySqlConnection connection = new MySqlConnection(connectionString); MySqlCommand cmd = new MySqlCommand(strSQL, connection); try { connection.Open(); MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); return myReader; } catch (Exception e) { throw new Exception(e.Message); } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { DataSet ds = new DataSet(); try { connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection); command.Fill(ds, "ds"); } catch (Exception ex) { //throw new Exception(ex.Message); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } return ds; } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString, DataSet ds, string TableName) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection); command.Fill(ds, TableName); } catch (Exception ex) { throw new Exception(ex.Message); } return ds; } } /// /// 执行查询语句,返回DataTable /// /// 查询语句 /// DataTable public static DataTable QueryTable(string SQLString) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { var dt = new DataTable(); try { connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection); command.Fill(dt); } catch (Exception ex) { return new DataTable(); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } return dt; } } /// /// 执行查询语句,返回DataTable /// /// 查询语句 /// 数据库连接字符串 /// DataTable public static DataTable QueryTable(string SQLString, string conStr) { using (MySqlConnection connection = new MySqlConnection(conStr)) { var dt = new DataTable(); try { connection.Open(); MySqlDataAdapter command = new MySqlDataAdapter(SQLString, connection); command.Fill(dt); } catch (Exception ex) { return new DataTable(); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } return dt; } } #endregion #region 执行带参数的SQL语句 /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { using (MySqlCommand cmd = new MySqlCommand()) { PrepareCommand(cmd, connection, null, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } } catch (Exception E) { //throw new Exception(E.Message); return 0; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static int ExecuteSql(string SQLString, string conStr, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(conStr)) { try { using (MySqlCommand cmd = new MySqlCommand()) { PrepareCommand(cmd, connection, null, SQLString, cmdParms); int rows = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return rows; } } catch (Exception E) { //throw new Exception(E.Message); return 0; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static DataSet ExecuteProc(string produce, params MySqlParameter[] cmdParms) { DataSet ds = new DataSet(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { using (MySqlCommand cmd = new MySqlCommand()) { PrepareCommand(cmd, connection, null, CommandType.StoredProcedure, produce, cmdParms); using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { try { da.Fill(ds); cmd.Parameters.Clear(); } catch (Exception ex) { //throw new Exception(ex.Message); } return ds; } } } catch (Exception E) { //throw new Exception(E.Message); return ds; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } //执行(带参)存储过程返回DataTable public static DataTable ExecuteProcToDataTable(string strProcName, params MySqlParameter[] parameters) { DataTable dt = new DataTable(); using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { MySqlCommand cmd = new MySqlCommand(); cmd.CommandText = strProcName; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = conn; conn.Open(); if (parameters != null) { // 添加参数 cmd.Parameters.AddRange(parameters); } // 取数据 using (MySqlDataAdapter adapter = new MySqlDataAdapter(cmd)) { adapter.Fill(dt); } } catch (Exception ex) { throw new Exception("错误:" + ex.Message + "/r/n跟踪:" + ex.StackTrace); } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } return dt; } /// /// 执行SQL语句,返回影响的记录数 /// /// SQL语句 /// 影响的记录数 public static MySqlCommand ExecuteProcToCommand(string produce, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { //connection.Open(); using (MySqlCommand cmd = new MySqlCommand()) { try { PrepareCommand(cmd, connection, null, CommandType.StoredProcedure, produce, cmdParms); cmd.ExecuteNonQuery(); return cmd; } catch (Exception E) { throw new Exception(E.Message); } } } } public static void ExecuteProcTest() { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { string str_Sql = @"call proc_test(:p1,:p2)"; /*不能用:call proc_test(?,?)或者call proc_test(@p1,@p2),这样会报ORA-01036:非法的变量名/编号错误 */ MySqlCommand cmd = new MySqlCommand(str_Sql, connection); /*cmd.CommandType = CommandType.StoredProcedure;-注意这种方式调用存储过程,不能指定CommandType为StoredProcedure */ MySqlParameter pram1 = new MySqlParameter("p1", MySqlDbType.VarChar, 10); pram1.Value = "test"; cmd.Parameters.Add(pram1); MySqlParameter pram2 = new MySqlParameter("p2", MySqlDbType.VarChar, 10); pram2.Direction = ParameterDirection.Output; cmd.Parameters.Add(pram2); connection.Open(); cmd.ExecuteNonQuery(); string text = cmd.Parameters[1].Value.ToString(); } catch (Exception ex) { throw new Exception(ex.Message); } finally { connection.Close(); } } } public static void ExecuteProcTest2(string produce, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { //connection.Open(); using (MySqlCommand cmd = new MySqlCommand()) { try { cmd.CommandText = produce; cmd.CommandType = CommandType.StoredProcedure; cmd.Connection = connection; connection.Open(); cmd.Parameters.Add(cmdParms[0]); cmd.Parameters.Add(cmdParms[1]); //PrepareCommand(cmd, connection, null, CommandType.StoredProcedure, produce, cmdParms); cmd.ExecuteNonQuery(); string p1 = cmd.Parameters["p1"].Value.ToString();////执行完成后得到回传的结果 string p2 = cmd.Parameters["p2"].Value.ToString();////执行完成后得到回传的结果 } catch (Exception E) { throw new Exception(E.Message); } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[]) public static void ExecuteSqlTran(Hashtable SQLStringList) { using (MySqlConnection conn = new MySqlConnection(connectionString)) { conn.Open(); using (MySqlTransaction trans = conn.BeginTransaction()) { MySqlCommand cmd = new MySqlCommand(); try { //循环 foreach (DictionaryEntry myDE in SQLStringList) { string cmdText = myDE.Key.ToString(); MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Value; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); trans.Commit(); } } catch { trans.Rollback(); throw; } } } } /// /// 执行多条SQL语句,实现数据库事务。 /// /// SQL语句的哈希表(key为sql语句,value是该语句的MySqlParameter[]) public static bool ExecuteSqlTranBool(List SQLStringList) { var _result = false; using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { conn.Open(); using (MySqlTransaction trans = conn.BeginTransaction()) { MySqlCommand cmd = new MySqlCommand(); try { //循环 foreach (FangYar.Model.OA.CommonSql myDE in SQLStringList) { string cmdText = myDE.sql; MySqlParameter[] cmdParms = myDE.param; PrepareCommand(cmd, conn, trans, cmdText, cmdParms); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } trans.Commit(); _result = true; } catch (Exception e) { trans.Rollback(); throw; } } } catch (Exception ex) { } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } return _result; } /// /// 使用oracle参数化批量插入、更新,实现数据库事务。--做文件上传,批量导入,批量更新 /// /// SQL语句的dictionary集合(key为MySqlParameter[]语句,value是该语句的sql语句) public static int ExecuteSqlListParameterTran(Dictionary list) { int val = 0; using (MySqlConnection conn = new MySqlConnection(connectionString)) { try { conn.Open(); using (MySqlTransaction trans = conn.BeginTransaction()) { MySqlCommand cmd = new MySqlCommand(); cmd.Connection = conn; try { //循环 foreach (KeyValuePair myDE in list) { if (myDE.Key == null) { cmd.CommandText = myDE.Value.ToString(); if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text; val += cmd.ExecuteNonQuery(); } else { cmd.CommandText = myDE.Value.ToString(); if (trans != null) cmd.Transaction = trans; cmd.CommandType = CommandType.Text; MySqlParameter[] cmdParms = (MySqlParameter[])myDE.Key; if (cmdParms != null) { foreach (MySqlParameter item in cmdParms) { cmd.Parameters.Add(item); } } val += cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); } } trans.Commit(); } catch { trans.Rollback(); throw; } } } catch (Exception ex) { } finally { if (conn.State == ConnectionState.Open) { conn.Close(); MySqlConnection.ClearPool(conn);//加入此行可释放连接 conn.Dispose(); } GC.Collect(); } } return val; } /// /// 执行一条计算查询结果语句,返回查询结果(object)。 /// /// 计算查询结果语句 /// 查询结果(object) public static object GetSingle(string SQLString, params MySqlParameter[] cmdParms) { using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { using (MySqlCommand cmd = new MySqlCommand()) { 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 (Exception e) { return "0"; } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } } /// /// 执行查询语句,返回MySqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close ) /// /// 查询语句 /// MySqlDataReader public static MySqlDataReader ExecuteReader(string SQLString, params MySqlParameter[] cmdParms) { MySqlConnection connection = new MySqlConnection(connectionString); MySqlCommand cmd = new MySqlCommand(); try { PrepareCommand(cmd, connection, null, SQLString, cmdParms); MySqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection); cmd.Parameters.Clear(); return myReader; } catch (Exception e) { throw new Exception(e.Message); } } /// /// 执行查询语句,返回DataSet /// /// 查询语句 /// DataSet public static DataSet Query(string SQLString, params MySqlParameter[] cmdParms) { DataSet ds = new DataSet(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { MySqlCommand cmd = new MySqlCommand(); PrepareCommand(cmd, connection, null, SQLString, cmdParms); using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { da.Fill(ds, "ds"); cmd.Parameters.Clear(); } } catch (Exception ex) { //throw new Exception(ex.Message); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } return ds; } /// /// 执行查询语句,返回DataTable /// /// 查询语句 /// DataTable public static DataTable QueryTable(string SQLString, params MySqlParameter[] cmdParms) { var dt = new DataTable(); using (MySqlConnection connection = new MySqlConnection(connectionString)) { try { //MySqlCommand cmd = new MySqlCommand(); //PrepareCommand(cmd, connection, null, SQLString, cmdParms); //using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) //{ // da.Fill(dt); // cmd.Parameters.Clear(); //} MySqlCommand cmd = new MySqlCommand(SQLString, connection); cmd.Parameters.AddRange(cmdParms); try { using (MySqlDataAdapter da = new MySqlDataAdapter(cmd)) { //da.MissingSchemaAction = MissingSchemaAction.AddWithKey; DataSet ds = new DataSet(); da.Fill(ds, new Guid().ToString()); if (ds != null) { if (ds.Tables.Count > 0) { dt = ds.Tables[0]; } } da.Dispose(); //cmd.Parameters.Clear(); cmd.Dispose(); } } catch (Exception exc) { FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = exc + "", msgType = FangYar.Common.EnumLogMsgTypeEnum.Error, path = "SqlError" }); } } catch (Exception ex) { //throw new Exception(ex.Message); FangYar.Common.MyLogHelper.WriteMsg(new FangYar.Common.LogInfoMo() { message = ex + "", msgType = FangYar.Common.EnumLogMsgTypeEnum.Error, path = "SqlError" }); } finally { if (connection.State == ConnectionState.Open) { connection.Close(); MySqlConnection.ClearPool(connection);//加入此行可释放连接 connection.Dispose(); } GC.Collect(); } } return dt; } /// /// 替换sql语句中的参数占位为真实的参数值 /// /// MySqlCommand对象 /// 数据库连接对象 /// 事务对象 /// sql语句 /// 参数值数组 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, string cmdText, MySqlParameter[] 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) { cmd.Parameters.AddRange(cmdParms); //foreach (MySqlParameter parm in cmdParms) //{ // try // { // if (!cmd.Parameters.Contains(parm)) // { // cmd.Parameters.Add(parm); // } // } // catch(Exception ex) // { // } //} } } ///// ///// 替换sql语句中的参数占位为真实的参数值 ///// ///// MySqlCommand对象 ///// 数据库连接对象 ///// 事务对象 ///// sql语句 ///// 参数值数组 private static void PrepareCommand(MySqlCommand cmd, MySqlConnection conn, MySqlTransaction trans, CommandType cmdtype, string cmdText, MySqlParameter[] cmdParms) { if (conn.State != ConnectionState.Open) conn.Open(); cmd.Connection = conn; cmd.CommandText = cmdText; if (trans != null) cmd.Transaction = trans; cmd.CommandType = cmdtype;//cmdType; if (cmdParms != null) { foreach (MySqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } #endregion #region 统计某表记录总数 /// /// 统计某表记录总数 /// /// 主键/索引键 /// 数据库.用户名.表名 /// 查询条件 /// 返回记录总数 public static int GetRecordCount(string keyField, string tableName, string condition) { int RecordCount = 0; string sql = "select count(" + keyField + ") as count from " + tableName + " " + condition; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); return RecordCount; } #endregion #region 统计某表记录总数 /// /// 统计某表记录总数 /// /// /// public static int GetRecordCount(string sql) { int RecordCount = 0; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); return RecordCount; } /// /// 统计某表记录总数 /// /// 可重复的字段 /// 数据库.用户名.表名 /// 查询条件 /// 字段是否主键 /// 返回记录总数 public static int GetRecordCount(string Field, string tableName, string condition, bool flag) { int RecordCount = 0; if (flag) { RecordCount = GetRecordCount(Field, tableName, condition); } else { string sql = "select count(distinct(" + Field + ")) as count from " + tableName + " " + condition; DataSet ds = Query(sql); if (ds.Tables[0].Rows.Count > 0) { RecordCount = Convert.ToInt32(ds.Tables[0].Rows[0][0]); } ds.Clear(); ds.Dispose(); } return RecordCount; } #endregion #region 统计某表分页总数 /// /// 统计某表分页总数 /// /// 主键/索引键 /// 表名 /// 查询条件 /// 页宽 /// 记录总数 /// 返回分页总数 public int GetPageCount(string keyField, string tableName, string condition, int pageSize, int RecordCount) { int PageCount = 0; PageCount = (RecordCount % pageSize) > 0 ? (RecordCount / pageSize) + 1 : RecordCount / pageSize; if (PageCount < 1) PageCount = 1; return PageCount; } /// /// 统计某表分页总数 /// /// 主键/索引键 /// 表名 /// 查询条件 /// 页宽 /// 返回页面总数 public int GetPageCount(string keyField, string tableName, string condition, int pageSize, ref int RecordCount) { RecordCount = GetRecordCount(keyField, tableName, condition); return GetPageCount(keyField, tableName, condition, pageSize, RecordCount); } /// /// 统计某表分页总数 /// /// 可重复的字段 /// 表名 /// 查询条件 /// 页宽 /// 是否主键 /// 返回页页总数 public int GetPageCount(string Field, string tableName, string condition, ref int RecordCount, int pageSize, bool flag) { RecordCount = GetRecordCount(Field, tableName, condition, flag); return GetPageCount(Field, tableName, condition, pageSize, ref RecordCount); } #endregion #endregion } }