MySqlHelper.cs
上传用户:simon2hong
上传日期:2021-11-18
资源大小:16746k
文件大小:9k
源码类别:

OA系统

开发平台:

C#

  1. using System;
  2. using System.Data;
  3. using System.Data.Common;
  4. using System.Text;
  5. using MySql.Data.MySqlClient;
  6. namespace DBUtility
  7. {
  8.     /// <summary>
  9.     /// 数据库操作基类(for MySql)
  10.     /// </summary>
  11.     internal class MySqlHelper : IDBHelper
  12.     {
  13.         /// <summary>
  14.         /// 获取分页SQL
  15.         /// </summary>
  16.         /// <param name="tblName">表名</param>
  17.         /// <param name="pageSize">每页显示条数</param>
  18.         /// <param name="pageIndex">第几页</param>
  19.         /// <param name="fldSort">排序字段(最后一个不需要填写正序还是倒序,例如:id asc, name)</param>
  20.         /// <param name="fldDir">最后一个排序字段的正序或倒序(true为倒序,false为正序)</param>
  21.         /// <param name="condition">条件</param>
  22.         /// <returns>返回用于分页的SQL语句</returns>
  23.         private string GetPagerSQL(string tblName, int pageSize, int pageIndex, string fldSort, bool fldDir, string condition)
  24.         {
  25.             string strDir = fldDir ? " ASC" : " DESC";
  26.             StringBuilder strSql = new StringBuilder("select * from " + tblName);
  27.             if (!string.IsNullOrEmpty(condition))
  28.             {
  29.                 strSql.AppendFormat(" where {0} order by {1}{2}", condition, fldSort, strDir);
  30.             }
  31.             else
  32.             {
  33.                 strSql.AppendFormat(" order by {0}{1}", fldSort, strDir);
  34.             }
  35.             strSql.AppendFormat(" limit {0},{1}", pageSize * (pageIndex - 1), pageSize);
  36.             return strSql.ToString();
  37.         }
  38.         /// <summary>
  39.         /// 分页获取数据
  40.         /// </summary>
  41.         /// <param name="connectionString">连接字符串</param>
  42.         /// <param name="tblName">表名</param>
  43.         /// <param name="fldName">字段名</param>
  44.         /// <param name="pageSize">页大小</param>
  45.         /// <param name="pageIndex">第几页</param>
  46.         /// <param name="fldSort">排序字段</param>
  47.         /// <param name="fldDir">升序{False}/降序(True)</param>
  48.         /// <param name="condition">条件(不需要where)</param>
  49.         public DbDataReader GetPageList(string connectionString, string tblName, int pageSize,
  50.             int pageIndex, string fldSort, bool fldDir, string condition)
  51.         {
  52.             string sql = GetPagerSQL(tblName, pageSize, pageIndex, fldSort, fldDir, condition);
  53.             return ExecuteReader(connectionString, CommandType.Text, sql, null);
  54.         }
  55.         /// <summary>
  56.         /// 得到数据条数
  57.         /// </summary>
  58.         public int GetCount(string connectionString, string tblName, string condition)
  59.         {
  60.             StringBuilder sql = new StringBuilder("select count(*) from " + tblName);
  61.             if (!string.IsNullOrEmpty(condition))
  62.                 sql.Append(" where " + condition);
  63.             object count = ExecuteScalar(connectionString, CommandType.Text, sql.ToString(), null);
  64.             return int.Parse(count.ToString());
  65.         }
  66.         /// <summary>
  67.         /// 执行查询,返回DataSet
  68.         /// </summary>
  69.         public DataSet ExecuteQuery(string connectionString, CommandType cmdType, string cmdText,
  70.             params DbParameter[] cmdParms)
  71.         {
  72.             using (MySqlConnection conn = new MySqlConnection(connectionString))
  73.             {
  74.                 using (MySqlCommand cmd = new MySqlCommand())
  75.                 {
  76.                     PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
  77.                     using (MySqlDataAdapter da = new MySqlDataAdapter(cmd))
  78.                     {
  79.                         DataSet ds = new DataSet();
  80.                         da.Fill(ds, "ds");
  81.                         cmd.Parameters.Clear();
  82.                         return ds;
  83.                     }
  84.                 }
  85.             }
  86.         }
  87.         /// <summary>
  88.         /// 在事务中执行查询,返回DataSet
  89.         /// </summary>
  90.         public DataSet ExecuteQuery(DbTransaction trans, CommandType cmdType, string cmdText,
  91.             params DbParameter[] cmdParms)
  92.         {
  93.             MySqlCommand cmd = new MySqlCommand();
  94.             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
  95.             MySqlDataAdapter da = new MySqlDataAdapter(cmd);
  96.             DataSet ds = new DataSet();
  97.             da.Fill(ds, "ds");
  98.             cmd.Parameters.Clear();
  99.             return ds;
  100.         }
  101.         /// <summary>
  102.         /// 执行 Transact-SQL 语句并返回受影响的行数。
  103.         /// </summary>
  104.         public int ExecuteNonQuery(string connectionString, CommandType cmdType, string cmdText,
  105.             params DbParameter[] cmdParms)
  106.         {
  107.             MySqlCommand cmd = new MySqlCommand();
  108.             using (MySqlConnection conn = new MySqlConnection(connectionString))
  109.             {
  110.                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
  111.                 int val = cmd.ExecuteNonQuery();
  112.                 cmd.Parameters.Clear();
  113.                 return val;
  114.             }
  115.         }
  116.         /// <summary>
  117.         /// 在事务中执行 Transact-SQL 语句并返回受影响的行数。
  118.         /// </summary>
  119.         public int ExecuteNonQuery(DbTransaction trans, CommandType cmdType, string cmdText,
  120.             params DbParameter[] cmdParms)
  121.         {
  122.             MySqlCommand cmd = new MySqlCommand();
  123.             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
  124.             int val = cmd.ExecuteNonQuery();
  125.             cmd.Parameters.Clear();
  126.             return val;
  127.         }
  128.         /// <summary>
  129.         /// 执行查询,返回DataReader
  130.         /// </summary>
  131.         public DbDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText,
  132.             params DbParameter[] cmdParms)
  133.         {
  134.             MySqlCommand cmd = new MySqlCommand();
  135.             MySqlConnection conn = new MySqlConnection(connectionString);
  136.             try
  137.             {
  138.                 PrepareCommand(cmd, conn, null, cmdType, cmdText, cmdParms);
  139.                 MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  140.                 cmd.Parameters.Clear();
  141.                 return rdr;
  142.             }
  143.             catch (Exception e)
  144.             {
  145.                 conn.Close();
  146.                 throw e;
  147.             }
  148.         }
  149.         /// <summary>
  150.         /// 在事务中执行查询,返回DataReader
  151.         /// </summary>
  152.         public DbDataReader ExecuteReader(DbTransaction trans, CommandType cmdType, string cmdText,
  153.             params DbParameter[] cmdParms)
  154.         {
  155.             MySqlCommand cmd = new MySqlCommand();
  156.             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
  157.             MySqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  158.             cmd.Parameters.Clear();
  159.             return rdr;
  160.         }
  161.         /// <summary>
  162.         /// 执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
  163.         /// </summary>
  164.         public object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText,
  165.             params DbParameter[] cmdParms)
  166.         {
  167.             MySqlCommand cmd = new MySqlCommand();
  168.             using (MySqlConnection connection = new MySqlConnection(connectionString))
  169.             {
  170.                 PrepareCommand(cmd, connection, null, cmdType, cmdText, cmdParms);
  171.                 object val = cmd.ExecuteScalar();
  172.                 cmd.Parameters.Clear();
  173.                 return val;
  174.             }
  175.         }
  176.         /// <summary>
  177.         /// 在事务中执行查询,并返回查询所返回的结果集中第一行的第一列。忽略其他列或行。
  178.         /// </summary>
  179.         public object ExecuteScalar(DbTransaction trans, CommandType cmdType, string cmdText,
  180.             params DbParameter[] cmdParms)
  181.         {
  182.             MySqlCommand cmd = new MySqlCommand();
  183.             PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, cmdParms);
  184.             object val = cmd.ExecuteScalar();
  185.             cmd.Parameters.Clear();
  186.             return val;
  187.         }
  188.         /// <summary>
  189.         /// 生成要执行的命令
  190.         /// </summary>
  191.         private static void PrepareCommand(DbCommand cmd, DbConnection conn, DbTransaction trans, CommandType cmdType,
  192.             string cmdText, DbParameter[] cmdParms)
  193.         {
  194.             // 如果存在参数,则表示用户是用参数形式的SQL语句,可以替换
  195.             if (cmdParms != null && cmdParms.Length > 0)
  196.                 cmdText = cmdText.Replace("@", "?").Replace(":", "?");
  197.             if (conn.State != ConnectionState.Open)
  198.                 conn.Open();
  199.             cmd.Connection = conn;
  200.             cmd.CommandText = cmdText;
  201.             if (trans != null)
  202.                 cmd.Transaction = trans;
  203.             cmd.CommandType = cmdType;
  204.             if (cmdParms != null)
  205.             {
  206.                 foreach (MySqlParameter parm in cmdParms)
  207.                 {
  208.                     parm.ParameterName = parm.ParameterName.Replace("@", "?").Replace(":", "?");
  209.                     cmd.Parameters.Add(parm);
  210.                 }
  211.             }
  212.         }
  213.     }
  214. }