实用的DBHelper

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值