MSSQL数据访问基础类

  1. using System;
  2. using System.Data;
  3. using System.Data.SqlClient;
  4. using System.Collections;
  5. using System.Collections.Specialized;
  6. using System.Configuration;
  7. using System.Web;
  8. using System.Web.Security;
  9. using System.Web.UI;
  10. using System.Web.UI.WebControls;
  11. using System.Web.UI.WebControls.WebParts;
  12. using System.Web.UI.HtmlControls;
  13. /// <summary>
  14. /// 数据访问基础类(基于SQLServer)
  15. /// </summary>
  16. public abstract class DbHelperSQL
  17. {
  18.     //数据库连接字符串(web.config来配置)
  19.     //<add key="ConnectionString" value="Data Source=CHF;Initial Catalog=JGXT;User ID=sa" />  
  20.     //public static readonly string connectionString = ConfigurationSettings.AppSettings["JGXTConnectionString"];
  21.     public static readonly string connectionString = ConfigurationManager.ConnectionStrings["strProvider"].ConnectionString;
  22.     public DbHelperSQL()
  23.     {
  24.     }
  25.     /// <summary>
  26.     /// 获取表某个字段的最大值(增加于2006年9月13日)
  27.     /// </summary>
  28.     /// <param name="FieldName"></param>
  29.     /// <param name="TableName"></param>
  30.     /// <returns></returns>
  31.     public static int GetMaxID(string FieldName, string TableName)
  32.     {
  33.         //string strSql = "select count(" + FieldName + ") from " + TableName;
  34.         string strSql = "select max(" + FieldName + ") from " + TableName;
  35.         using (SqlConnection connection = new SqlConnection(connectionString))
  36.         {
  37.             using (SqlCommand cmd = new SqlCommand(strSql, connection))
  38.             {
  39.                 try
  40.                 {
  41.                     connection.Open();
  42.                     object obj = cmd.ExecuteScalar();
  43.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  44.                     {
  45.                         return 1;
  46.                     }
  47.                     else
  48.                     {
  49.                         return Convert.ToInt32(obj.ToString()) + 1;
  50.                     }
  51.                 }
  52.                 catch (System.Data.SqlClient.SqlException E)
  53.                 {
  54.                     connection.Close();
  55.                     throw new Exception(E.Message);
  56.                 }
  57.             }
  58.         }
  59.     }
  60.     #region 执行带参数的SQL语句
  61.     /// <summary>
  62.     /// 执行SQL语句,返回是否存在该记录
  63.     /// </summary>
  64.     /// <param name="SQLString">SQL语句</param>
  65.     /// <returns>是否存在</returns>
  66.     public static bool Exists(string SQLString, params SqlParameter[] cmdParms)
  67.     {
  68.         using (SqlConnection connection = new SqlConnection(connectionString))
  69.         {
  70.             using (SqlCommand cmd = new SqlCommand())
  71.             {
  72.                 try
  73.                 {
  74.                     PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  75.                     object obj = cmd.ExecuteScalar();
  76.                     cmd.Parameters.Clear();
  77.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  78.                     {
  79.                         return false;
  80.                     }
  81.                     else
  82.                     {
  83.                         int i = int.Parse(obj.ToString());
  84.                         if (i > 0)
  85.                         {
  86.                             return true;
  87.                         }
  88.                         else
  89.                         {
  90.                             return false;
  91.                         }
  92.                     }
  93.                 }
  94.                 catch (System.Data.SqlClient.SqlException E)
  95.                 {
  96.                     throw new Exception(E.Message);
  97.                 }
  98.             }
  99.         }
  100.     }
  101.     /// <summary>
  102.     /// 执行SQL语句,返回影响的记录数
  103.     /// </summary>
  104.     /// <param name="SQLString">SQL语句</param>
  105.     /// <returns>影响的记录数</returns>
  106.     public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
  107.     {
  108.         using (SqlConnection connection = new SqlConnection(connectionString))
  109.         {
  110.             using (SqlCommand cmd = new SqlCommand())
  111.             {
  112.                 try
  113.                 {
  114.                     PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  115.                     int rows = cmd.ExecuteNonQuery();
  116.                     cmd.Parameters.Clear();
  117.                     return rows;
  118.                 }
  119.                 catch (System.Data.SqlClient.SqlException E)
  120.                 {
  121.                     throw new Exception(E.Message);
  122.                 }
  123.             }
  124.         }
  125.     }
  126.     /// <summary>
  127.     /// 执行多条SQL语句,实现数据库事务。
  128.     /// </summary>
  129.     /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  130.     public static void ExecuteSqlTran(Hashtable SQLStringList)
  131.     {
  132.         using (SqlConnection conn = new SqlConnection(connectionString))
  133.         {
  134.             conn.Open();
  135.             using (SqlTransaction trans = conn.BeginTransaction())
  136.             {
  137.                 SqlCommand cmd = new SqlCommand();
  138.                 try
  139.                 {
  140.                     //循环
  141.                     foreach (DictionaryEntry myDE in SQLStringList)
  142.                     {
  143.                         string cmdText = myDE.Key.ToString();
  144.                         SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  145.                         PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  146.                         int val = cmd.ExecuteNonQuery();
  147.                         cmd.Parameters.Clear();
  148.                         trans.Commit();
  149.                     }
  150.                 }
  151.                 catch
  152.                 {
  153.                     trans.Rollback();
  154.                     throw;
  155.                 }
  156.             }
  157.         }
  158.     }
  159.     /// <summary>
  160.     /// 执行一条计算查询结果语句,返回查询结果(object)。
  161.     /// </summary>
  162.     /// <param name="SQLString">计算查询结果语句</param>
  163.     /// <returns>查询结果(object)</returns>
  164.     public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
  165.     {
  166.         using (SqlConnection connection = new SqlConnection(connectionString))
  167.         {
  168.             using (SqlCommand cmd = new SqlCommand())
  169.             {
  170.                 try
  171.                 {
  172.                     PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  173.                     object obj = cmd.ExecuteScalar();
  174.                     cmd.Parameters.Clear();
  175.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  176.                     {
  177.                         return null;
  178.                     }
  179.                     else
  180.                     {
  181.                         return obj;
  182.                     }
  183.                 }
  184.                 catch (System.Data.SqlClient.SqlException e)
  185.                 {
  186.                     throw new Exception(e.Message);
  187.                 }
  188.             }
  189.         }
  190.     }
  191.     /// <summary>
  192.     /// 执行查询语句,返回SqlDataReader
  193.     /// </summary>
  194.     /// <param name="strSQL">查询语句</param>
  195.     /// <returns>SqlDataReader</returns>
  196.     public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
  197.     {
  198.         SqlConnection connection = new SqlConnection(connectionString);
  199.         SqlCommand cmd = new SqlCommand();
  200.         try
  201.         {
  202.             PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  203.             SqlDataReader myReader = cmd.ExecuteReader();
  204.             cmd.Parameters.Clear();
  205.             return myReader;
  206.         }
  207.         catch (System.Data.SqlClient.SqlException e)
  208.         {
  209.             throw new Exception(e.Message);
  210.         }
  211.     }
  212.     /// <summary>
  213.     /// 执行查询语句,返回DataSet
  214.     /// </summary>
  215.     /// <param name="SQLString">查询语句</param>
  216.     /// <returns>DataSet</returns>
  217.     public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  218.     {
  219.         using (SqlConnection connection = new SqlConnection(connectionString))
  220.         {
  221.             SqlCommand cmd = new SqlCommand();
  222.             PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  223.             using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  224.             {
  225.                 DataSet ds = new DataSet();
  226.                 try
  227.                 {
  228.                     da.Fill(ds, "ds");
  229.                     cmd.Parameters.Clear();
  230.                 }
  231.                 catch (System.Data.SqlClient.SqlException ex)
  232.                 {
  233.                     throw new Exception(ex.Message);
  234.                 }
  235.                 return ds;
  236.             }
  237.         }
  238.     }
  239.     private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
  240.     {
  241.         if (conn.State != ConnectionState.Open)
  242.             conn.Open();
  243.         cmd.Connection = conn;
  244.         cmd.CommandText = cmdText;
  245.         if (trans != null)
  246.             cmd.Transaction = trans;
  247.         cmd.CommandType = CommandType.Text;//cmdType;
  248.         if (cmdParms != null)
  249.         {
  250.             foreach (SqlParameter parm in cmdParms)
  251.                 cmd.Parameters.Add(parm);
  252.         }
  253.     }
  254.     #endregion
  255.     #region  执行简单SQL语句
  256.     /// <summary>
  257.     /// 执行SQL语句,返回影响的记录数
  258.     /// </summary>
  259.     /// <param name="SQLString">SQL语句</param>
  260.     /// <returns>影响的记录数</returns>
  261.     public static int ExecuteSql(string SQLString)
  262.     {
  263.         using (SqlConnection connection = new SqlConnection(connectionString))
  264.         {
  265.             using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  266.             {
  267.                 try
  268.                 {
  269.                     connection.Open();
  270.                     int rows = cmd.ExecuteNonQuery();
  271.                     return rows;
  272.                 }
  273.                 catch (System.Data.SqlClient.SqlException E)
  274.                 {
  275.                     connection.Close();
  276.                     throw new Exception(E.Message);
  277.                 }
  278.             }
  279.         }
  280.     }
  281.     /// <summary>
  282.     /// 执行多条SQL语句,实现数据库事务。
  283.     /// </summary>
  284.     /// <param name="SQLStringList">多条SQL语句</param>  
  285.     public static void ExecuteSqlTran(ArrayList SQLStringList)
  286.     {
  287.         using (SqlConnection conn = new SqlConnection(connectionString))
  288.         {
  289.             conn.Open();
  290.             SqlCommand cmd = new SqlCommand();
  291.             cmd.Connection = conn;
  292.             SqlTransaction tx = conn.BeginTransaction();
  293.             cmd.Transaction = tx;
  294.             try
  295.             {
  296.                 for (int n = 0; n < SQLStringList.Count; n++)
  297.                 {
  298.                     string strsql = SQLStringList[n].ToString();
  299.                     if (strsql.Trim().Length > 1)
  300.                     {
  301.                         cmd.CommandText = strsql;
  302.                         cmd.ExecuteNonQuery();
  303.                     }
  304.                 }
  305.                 tx.Commit();
  306.             }
  307.             catch (System.Data.SqlClient.SqlException E)
  308.             {
  309.                 tx.Rollback();
  310.                 throw new Exception(E.Message);
  311.             }
  312.         }
  313.     }
  314.     /// <summary>
  315.     /// 执行带一个存储过程参数的的SQL语句。
  316.     /// </summary>
  317.     /// <param name="SQLString">SQL语句</param>
  318.     /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  319.     /// <returns>影响的记录数</returns>
  320.     public static int ExecuteSql(string SQLString, string content)
  321.     {
  322.         using (SqlConnection connection = new SqlConnection(connectionString))
  323.         {
  324.             SqlCommand cmd = new SqlCommand(SQLString, connection);
  325.             System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  326.             myParameter.Value = content;
  327.             cmd.Parameters.Add(myParameter);
  328.             try
  329.             {
  330.                 connection.Open();
  331.                 int rows = cmd.ExecuteNonQuery();
  332.                 return rows;
  333.             }
  334.             catch (System.Data.SqlClient.SqlException E)
  335.             {
  336.                 throw new Exception(E.Message);
  337.             }
  338.             finally
  339.             {
  340.                 cmd.Dispose();
  341.                 connection.Close();
  342.             }
  343.         }
  344.     }
  345.     /// <summary>
  346.     /// 向数据库里插入图像格式的字段(和上面情况类似的另一种实例)
  347.     /// </summary>
  348.     /// <param name="strSQL">SQL语句</param>
  349.     /// <param name="fs">图像字节,数据库的字段类型为image的情况</param>
  350.     /// <returns>影响的记录数</returns>
  351.     public static int ExecuteSqlInsertImg(string strSQL, byte[] fs)
  352.     {
  353.         using (SqlConnection connection = new SqlConnection(connectionString))
  354.         {
  355.             SqlCommand cmd = new SqlCommand(strSQL, connection);
  356.             System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@fs", SqlDbType.Image);
  357.             myParameter.Value = fs;
  358.             cmd.Parameters.Add(myParameter);
  359.             try
  360.             {
  361.                 connection.Open();
  362.                 int rows = cmd.ExecuteNonQuery();
  363.                 return rows;
  364.             }
  365.             catch (System.Data.SqlClient.SqlException E)
  366.             {
  367.                 throw new Exception(E.Message);
  368.             }
  369.             finally
  370.             {
  371.                 cmd.Dispose();
  372.                 connection.Close();
  373.             }
  374.         }
  375.     }
  376.     /// <summary>
  377.     /// 执行一条计算查询结果语句,返回查询结果(object)。
  378.     /// </summary>
  379.     /// <param name="SQLString">计算查询结果语句</param>
  380.     /// <returns>查询结果(object)</returns>
  381.     public static object GetSingle(string SQLString)
  382.     {
  383.         using (SqlConnection connection = new SqlConnection(connectionString))
  384.         {
  385.             using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  386.             {
  387.                 try
  388.                 {
  389.                     connection.Open();
  390.                     object obj = cmd.ExecuteScalar();
  391.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  392.                     {
  393.                         return null;
  394.                     }
  395.                     else
  396.                     {
  397.                         return obj;
  398.                     }
  399.                 }
  400.                 catch (System.Data.SqlClient.SqlException e)
  401.                 {
  402.                     connection.Close();
  403.                     throw new Exception(e.Message);
  404.                 }
  405.             }
  406.         }
  407.     }
  408.     /// <summary>
  409.     /// 执行查询语句,返回SqlDataReader
  410.     /// </summary>
  411.     /// <param name="strSQL">查询语句</param>
  412.     /// <returns>SqlDataReader</returns>
  413.     public static SqlDataReader ExecuteReader(string strSQL)
  414.     {
  415.         SqlConnection connection = new SqlConnection(connectionString);
  416.         SqlCommand cmd = new SqlCommand(strSQL, connection);
  417.         try
  418.         {
  419.             connection.Open();
  420.             SqlDataReader myReader = cmd.ExecuteReader();
  421.             return myReader;
  422.         }
  423.         catch (System.Data.SqlClient.SqlException e)
  424.         {
  425.             throw new Exception(e.Message);
  426.         }
  427.     }
  428.     /// <summary>
  429.     /// 执行查询语句,返回DataSet
  430.     /// </summary>
  431.     /// <param name="SQLString">查询语句</param>
  432.     /// <returns>DataSet</returns>
  433.     public static DataSet Query(string SQLString)
  434.     {
  435.         using (SqlConnection connection = new SqlConnection(connectionString))
  436.         {
  437.             DataSet ds = new DataSet();
  438.             try
  439.             {
  440.                 connection.Open();
  441.                 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  442.                 command.Fill(ds, "ds");
  443.             }
  444.             catch (System.Data.SqlClient.SqlException ex)
  445.             {
  446.                 throw new Exception(ex.Message);
  447.             }
  448.             return ds;
  449.         }
  450.     }
  451.     #endregion
  452.     #region 存储过程操作
  453.     /// <summary>
  454.     /// 执行存储过程
  455.     /// </summary>
  456.     /// <param name="storedProcName">存储过程名</param>
  457.     /// <param name="parameters">存储过程参数</param>
  458.     /// <returns>SqlDataReader</returns>
  459.     public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
  460.     {
  461.         SqlConnection connection = new SqlConnection(connectionString);
  462.         SqlDataReader returnReader;
  463.         connection.Open();
  464.         SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  465.         command.CommandType = CommandType.StoredProcedure;
  466.         returnReader = command.ExecuteReader();
  467.         return returnReader;
  468.     }
  469.     /// <summary>
  470.     /// 执行存储过程
  471.     /// </summary>
  472.     /// <param name="storedProcName">存储过程名</param>
  473.     /// <param name="parameters">存储过程参数</param>
  474.     /// <param name="tableName">DataSet结果中的表名</param>
  475.     /// <returns>DataSet</returns>
  476.     public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  477.     {
  478.         using (SqlConnection connection = new SqlConnection(connectionString))
  479.         {
  480.             DataSet dataSet = new DataSet();
  481.             connection.Open();
  482.             SqlDataAdapter sqlDA = new SqlDataAdapter();
  483.             sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  484.             sqlDA.Fill(dataSet, tableName);
  485.             connection.Close();
  486.             return dataSet;
  487.         }
  488.     }
  489.     /// <summary>
  490.     /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  491.     /// </summary>
  492.     /// <param name="connection">数据库连接</param>
  493.     /// <param name="storedProcName">存储过程名</param>
  494.     /// <param name="parameters">存储过程参数</param>
  495.     /// <returns>SqlCommand</returns>
  496.     private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  497.     {
  498.         SqlCommand command = new SqlCommand(storedProcName, connection);
  499.         command.CommandType = CommandType.StoredProcedure;
  500.         foreach (SqlParameter parameter in parameters)
  501.         {
  502.             command.Parameters.Add(parameter);
  503.         }
  504.         return command;
  505.     }
  506.     /// <summary>
  507.     /// 执行存储过程,返回影响的行数  
  508.     /// </summary>
  509.     /// <param name="storedProcName">存储过程名</param>
  510.     /// <param name="parameters">存储过程参数</param>
  511.     /// <param name="rowsAffected">影响的行数</param>
  512.     /// <returns></returns>
  513.     public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
  514.     {
  515.         using (SqlConnection connection = new SqlConnection(connectionString))
  516.         {
  517.             int result;
  518.             connection.Open();
  519.             SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
  520.             rowsAffected = command.ExecuteNonQuery();
  521.             result = (int)command.Parameters["ReturnValue"].Value;
  522.             //Connection.Close();
  523.             return result;
  524.         }
  525.     }
  526.     /// <summary>
  527.     /// 创建 SqlCommand 对象实例(用来返回一个整数值) 
  528.     /// </summary>
  529.     /// <param name="storedProcName">存储过程名</param>
  530.     /// <param name="parameters">存储过程参数</param>
  531.     /// <returns>SqlCommand 对象实例</returns>
  532.     private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  533.     {
  534.         SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  535.         command.Parameters.Add(new SqlParameter("ReturnValue",
  536.             SqlDbType.Int, 4, ParameterDirection.ReturnValue,
  537.             false, 0, 0, string.Empty, DataRowVersion.Default, null));
  538.         return command;
  539.     }
  540.     #endregion
  541. }
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值