架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

搜索
查看: 22293|回复: 1

[资料] 一个不错的DBHelper类,可执行存储过程

[复制链接]
发表于 2016-6-13 18:09:02 | 显示全部楼层 |阅读模式
  1. using System;
  2. using System.Collections;
  3. using System.Collections.Generic;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Linq;
  8. using System.Text;

  9. namespace AndroidPush.DataAccess
  10. {
  11.     public abstract class DBHelper
  12.     {

  13.         //数据库连接字符串(web.config来配置),可以动态更改connectionString支持多数据库.               
  14.         //public static string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  15.         public static string connectionString = "Data Source = 10.0.0.110;Initial Catalog = sb;User Id = sa;Password = 123;";
  16.         public DBHelper() { }

  17.         #region 公用方法

  18.         /// <summary>
  19.         /// 判断是否存在某表的某个字段
  20.         /// </summary>
  21.         /// <param name="tableName">表名称</param>
  22.         /// <param name="columnName">列名称</param>
  23.         /// <returns>是否存在</returns>
  24.         public static bool ColumnExists(string tableName, string columnName)
  25.         {
  26.             string sql = "select count(1) from syscolumns where [id]=object_id('" + tableName + "') and [name]='" + columnName + "'";
  27.             object res = GetSingle(sql);
  28.             if (res == null)
  29.             {
  30.                 return false;
  31.             }
  32.             return Convert.ToInt32(res) > 0;
  33.         }

  34.         /// <summary>
  35.         /// 取某表字段的最小值
  36.         /// </summary>
  37.         /// <param name="FieldName"></param>
  38.         /// <param name="TableName"></param>
  39.         /// <returns></returns>
  40.         public static int GetMinID(string FieldName, string TableName)
  41.         {
  42.             string strsql = "select min(" + FieldName + ") from " + TableName;
  43.             object obj = DBHelper.GetSingle(strsql);
  44.             if (obj == null)
  45.             {
  46.                 return 0;
  47.             }
  48.             else
  49.             {
  50.                 return int.Parse(obj.ToString());
  51.             }
  52.         }

  53.         /// <summary>
  54.         /// 取某表字段的最大值
  55.         /// </summary>
  56.         /// <param name="FieldName"></param>
  57.         /// <param name="TableName"></param>
  58.         /// <returns></returns>
  59.         public static int GetMaxID(string FieldName, string TableName)
  60.         {
  61.             string strsql = "select max(" + FieldName + ")+1 from " + TableName;
  62.             object obj = DBHelper.GetSingle(strsql);
  63.             if (obj == null)
  64.             {
  65.                 return 1;
  66.             }
  67.             else
  68.             {
  69.                 return int.Parse(obj.ToString());
  70.             }
  71.         }
  72.         public static bool Exists(string strSql)
  73.         {
  74.             object obj = DBHelper.GetSingle(strSql);
  75.             int cmdresult;
  76.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  77.             {
  78.                 cmdresult = 0;
  79.             }
  80.             else
  81.             {
  82.                 cmdresult = int.Parse(obj.ToString());
  83.             }
  84.             if (cmdresult == 0)
  85.             {
  86.                 return false;
  87.             }
  88.             else
  89.             {
  90.                 return true;
  91.             }
  92.         }

  93.         /// <summary>
  94.         /// 表是否存在
  95.         /// </summary>
  96.         /// <param name="TableName"></param>
  97.         /// <returns></returns>
  98.         public static bool TabExists(string TableName)
  99.         {
  100.             string strsql = "select count(*) from sysobjects where id = object_id(N'[" + TableName + "]') and OBJECTPROPERTY(id, N'IsUserTable') = 1";
  101.             //string strsql = "SELECT count(*) FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[" + TableName + "]') AND type in (N'U')";
  102.             object obj = DBHelper.GetSingle(strsql);
  103.             int cmdresult;
  104.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  105.             {
  106.                 cmdresult = 0;
  107.             }
  108.             else
  109.             {
  110.                 cmdresult = int.Parse(obj.ToString());
  111.             }
  112.             if (cmdresult == 0)
  113.             {
  114.                 return false;
  115.             }
  116.             else
  117.             {
  118.                 return true;
  119.             }
  120.         }
  121.         public static bool Exists(string strSql, params SqlParameter[] cmdParms)
  122.         {
  123.             object obj = DBHelper.GetSingle(strSql, cmdParms);
  124.             int cmdresult;
  125.             if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  126.             {
  127.                 cmdresult = 0;
  128.             }
  129.             else
  130.             {
  131.                 cmdresult = int.Parse(obj.ToString());
  132.             }
  133.             if (cmdresult == 0)
  134.             {
  135.                 return false;
  136.             }
  137.             else
  138.             {
  139.                 return true;
  140.             }
  141.         }
  142.         #endregion

  143.         #region  执行简单SQL语句

  144.         /// <summary>
  145.         /// 执行SQL语句,返回影响的记录数
  146.         /// </summary>
  147.         /// <param name="SQLString">SQL语句</param>
  148.         /// <returns>影响的记录数</returns>
  149.         public static int ExecuteSql(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.                         int rows = cmd.ExecuteNonQuery();
  159.                         return rows;
  160.                     }
  161.                     catch (System.Data.SqlClient.SqlException e)
  162.                     {
  163.                         connection.Close();
  164.                         throw e;
  165.                     }
  166.                 }
  167.             }
  168.         }

  169.         /// <summary>
  170.         /// (重载) 执行SQL语句,返回影响的记录数
  171.         /// </summary>
  172.         /// <param name="connection">SqlConnection对象</param>
  173.         /// <param name="trans">SqlTransaction事件</param>
  174.         /// <param name="SQLString">SQL语句</param>
  175.         /// <returns>影响的记录数</returns>
  176.         public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString)
  177.         {
  178.             using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  179.             {
  180.                 try
  181.                 {
  182.                     cmd.Connection = connection;
  183.                     cmd.Transaction = trans;
  184.                     int rows = cmd.ExecuteNonQuery();
  185.                     return rows;
  186.                 }
  187.                 catch (System.Data.SqlClient.SqlException e)
  188.                 {
  189.                     //trans.Rollback();
  190.                     throw e;
  191.                 }
  192.             }
  193.         }

  194.         public static int ExecuteSqlByTime(string SQLString, int Times)
  195.         {
  196.             using (SqlConnection connection = new SqlConnection(connectionString))
  197.             {
  198.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  199.                 {
  200.                     try
  201.                     {
  202.                         connection.Open();
  203.                         cmd.CommandTimeout = Times;
  204.                         int rows = cmd.ExecuteNonQuery();
  205.                         return rows;
  206.                     }
  207.                     catch (System.Data.SqlClient.SqlException e)
  208.                     {
  209.                         connection.Close();
  210.                         throw e;
  211.                     }
  212.                 }
  213.             }
  214.         }

  215.       
  216.         /// <summary>
  217.         /// 执行多条SQL语句,实现数据库事务。
  218.         /// </summary>
  219.         /// <param name="SQLStringList">多条SQL语句</param>               
  220.         public static int ExecuteSqlTran(List<String> SQLStringList)
  221.         {
  222.             using (SqlConnection conn = new SqlConnection(connectionString))
  223.             {
  224.                 conn.Open();
  225.                 SqlCommand cmd = new SqlCommand();
  226.                 cmd.Connection = conn;
  227.                 SqlTransaction tx = conn.BeginTransaction();
  228.                 cmd.Transaction = tx;
  229.                 try
  230.                 {
  231.                     int count = 0;
  232.                     for (int n = 0; n < SQLStringList.Count; n++)
  233.                     {
  234.                         string strsql = SQLStringList[n];
  235.                         if (strsql.Trim().Length > 1)
  236.                         {
  237.                             cmd.CommandText = strsql;
  238.                             count += cmd.ExecuteNonQuery();
  239.                         }
  240.                     }
  241.                     tx.Commit();
  242.                     return count;
  243.                 }
  244.                 catch
  245.                 {
  246.                     tx.Rollback();
  247.                     return 0;
  248.                 }
  249.             }
  250.         }
  251.         /// <summary>
  252.         /// 执行带一个存储过程参数的的SQL语句。
  253.         /// </summary>
  254.         /// <param name="SQLString">SQL语句</param>
  255.         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  256.         /// <returns>影响的记录数</returns>
  257.         public static int ExecuteSql(string SQLString, string content)
  258.         {
  259.             using (SqlConnection connection = new SqlConnection(connectionString))
  260.             {
  261.                 SqlCommand cmd = new SqlCommand(SQLString, connection);
  262.                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  263.                 myParameter.Value = content;
  264.                 cmd.Parameters.Add(myParameter);
  265.                 try
  266.                 {
  267.                     connection.Open();
  268.                     int rows = cmd.ExecuteNonQuery();
  269.                     return rows;
  270.                 }
  271.                 catch (System.Data.SqlClient.SqlException e)
  272.                 {
  273.                     throw e;
  274.                 }
  275.                 finally
  276.                 {
  277.                     cmd.Dispose();
  278.                     connection.Close();
  279.                 }
  280.             }
  281.         }
  282.         /// <summary>
  283.         /// 执行带一个存储过程参数的的SQL语句。
  284.         /// </summary>
  285.         /// <param name="SQLString">SQL语句</param>
  286.         /// <param name="content">参数内容,比如一个字段是格式复杂的文章,有特殊符号,可以通过这个方式添加</param>
  287.         /// <returns>影响的记录数</returns>
  288.         public static object ExecuteSqlGet(string SQLString, string content)
  289.         {
  290.             using (SqlConnection connection = new SqlConnection(connectionString))
  291.             {
  292.                 SqlCommand cmd = new SqlCommand(SQLString, connection);
  293.                 System.Data.SqlClient.SqlParameter myParameter = new System.Data.SqlClient.SqlParameter("@content", SqlDbType.NText);
  294.                 myParameter.Value = content;
  295.                 cmd.Parameters.Add(myParameter);
  296.                 try
  297.                 {
  298.                     connection.Open();
  299.                     object obj = cmd.ExecuteScalar();
  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 e;
  312.                 }
  313.                 finally
  314.                 {
  315.                     cmd.Dispose();
  316.                     connection.Close();
  317.                 }
  318.             }
  319.         }
  320.         

  321.         /// <summary>
  322.         /// 执行一条计算查询结果语句,返回查询结果(object)。
  323.         /// </summary>
  324.         /// <param name="SQLString">计算查询结果语句</param>
  325.         /// <returns>查询结果(object)</returns>
  326.         public static object GetSingle(string SQLString)
  327.         {
  328.             using (SqlConnection connection = new SqlConnection(connectionString))
  329.             {
  330.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  331.                 {
  332.                     try
  333.                     {
  334.                         connection.Open();
  335.                         object obj = cmd.ExecuteScalar();
  336.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  337.                         {
  338.                             return null;
  339.                         }
  340.                         else
  341.                         {
  342.                             return obj;
  343.                         }
  344.                     }
  345.                     catch (System.Data.SqlClient.SqlException e)
  346.                     {
  347.                         connection.Close();
  348.                         throw e;
  349.                     }
  350.                 }
  351.             }
  352.         }
  353.         public static object GetSingle(string SQLString, int Times)
  354.         {
  355.             using (SqlConnection connection = new SqlConnection(connectionString))
  356.             {
  357.                 using (SqlCommand cmd = new SqlCommand(SQLString, connection))
  358.                 {
  359.                     try
  360.                     {
  361.                         connection.Open();
  362.                         cmd.CommandTimeout = Times;
  363.                         object obj = cmd.ExecuteScalar();
  364.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  365.                         {
  366.                             return null;
  367.                         }
  368.                         else
  369.                         {
  370.                             return obj;
  371.                         }
  372.                     }
  373.                     catch (System.Data.SqlClient.SqlException e)
  374.                     {
  375.                         connection.Close();
  376.                         throw e;
  377.                     }
  378.                 }
  379.             }
  380.         }
  381.         /// <summary>
  382.         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  383.         /// </summary>
  384.         /// <param name="strSQL">查询语句</param>
  385.         /// <returns>SqlDataReader</returns>
  386.         public static SqlDataReader ExecuteReader(string strSQL)
  387.         {
  388.             SqlConnection connection = new SqlConnection(connectionString);
  389.             SqlCommand cmd = new SqlCommand(strSQL, connection);
  390.             try
  391.             {
  392.                 connection.Open();
  393.                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  394.                 return myReader;
  395.             }
  396.             catch (System.Data.SqlClient.SqlException e)
  397.             {
  398.                 throw e;
  399.             }

  400.         }
  401.         /// <summary>
  402.         /// 执行查询语句,返回DataSet
  403.         /// </summary>
  404.         /// <param name="SQLString">查询语句</param>
  405.         /// <returns>DataSet</returns>
  406.         public static DataSet Query(string SQLString)
  407.         {

  408.             using (SqlConnection connection = new SqlConnection(connectionString))
  409.             {
  410.                 DataSet ds = new DataSet();
  411.                 try
  412.                 {
  413.                     connection.Open();
  414.                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  415.                     command.Fill(ds, "ds");
  416.                 }
  417.                 catch (System.Data.SqlClient.SqlException ex)
  418.                 {
  419.                     throw new Exception(ex.Message);
  420.                 }
  421.                 return ds;
  422.             }

  423.         }
  424.         public static DataSet Query(string SQLString, int Times)
  425.         {
  426.             using (SqlConnection connection = new SqlConnection(connectionString))
  427.             {
  428.                 DataSet ds = new DataSet();
  429.                 try
  430.                 {
  431.                     connection.Open();
  432.                     SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  433.                     command.SelectCommand.CommandTimeout = Times;
  434.                     command.Fill(ds, "ds");
  435.                 }
  436.                 catch (System.Data.SqlClient.SqlException ex)
  437.                 {
  438.                     throw new Exception(ex.Message);
  439.                 }
  440.                 return ds;
  441.             }
  442.         }

  443.         /// <summary>
  444.         /// (重载) 执行查询语句,返回DataSet
  445.         /// </summary>
  446.         /// <param name="connection">SqlConnection对象</param>
  447.         /// <param name="trans">SqlTransaction事务</param>
  448.         /// <param name="SQLString">SQL语句</param>
  449.         /// <returns>DataSet</returns>
  450.         public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString)
  451.         {
  452.             DataSet ds = new DataSet();
  453.             try
  454.             {
  455.                 SqlDataAdapter command = new SqlDataAdapter(SQLString, connection);
  456.                 command.SelectCommand.Transaction = trans;
  457.                 command.Fill(ds, "ds");
  458.             }
  459.             catch (System.Data.SqlClient.SqlException ex)
  460.             {
  461.                 throw new Exception(ex.Message);
  462.             }
  463.             return ds;

  464.         }


  465.         #endregion

  466.         #region 执行带参数的SQL语句

  467.         /// <summary>
  468.         /// 执行SQL语句,返回影响的记录数
  469.         /// </summary>
  470.         /// <param name="SQLString">SQL语句</param>
  471.         /// <returns>影响的记录数</returns>
  472.         public static int ExecuteSql(string SQLString, params SqlParameter[] cmdParms)
  473.         {
  474.             using (SqlConnection connection = new SqlConnection(connectionString))
  475.             {
  476.                 using (SqlCommand cmd = new SqlCommand())
  477.                 {
  478.                     try
  479.                     {
  480.                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  481.                         int rows = cmd.ExecuteNonQuery();
  482.                         cmd.Parameters.Clear();
  483.                         return rows;
  484.                     }
  485.                     catch (System.Data.SqlClient.SqlException e)
  486.                     {
  487.                         throw e;
  488.                     }
  489.                 }
  490.             }
  491.         }

  492.         /// <summary>
  493.         /// (重载) 执行SQL语句,返回影响的记录数
  494.         /// </summary>
  495.         /// <param name="connection">SqlConnection对象</param>
  496.         /// <param name="trans">SqlTransaction对象</param>
  497.         /// <param name="SQLString">SQL语句</param>
  498.         /// <returns>影响的记录数</returns>
  499.         public static int ExecuteSql(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  500.         {
  501.             using (SqlCommand cmd = new SqlCommand())
  502.             {
  503.                 try
  504.                 {
  505.                     PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  506.                     int rows = cmd.ExecuteNonQuery();
  507.                     cmd.Parameters.Clear();
  508.                     return rows;
  509.                 }
  510.                 catch (System.Data.SqlClient.SqlException e)
  511.                 {
  512.                     //trans.Rollback();
  513.                     throw e;
  514.                 }
  515.             }
  516.         }

  517.         /// <summary>
  518.         /// 执行多条SQL语句,实现数据库事务。
  519.         /// </summary>
  520.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  521.         public static void ExecuteSqlTran(Hashtable SQLStringList)
  522.         {
  523.             using (SqlConnection conn = new SqlConnection(connectionString))
  524.             {
  525.                 conn.Open();
  526.                 using (SqlTransaction trans = conn.BeginTransaction())
  527.                 {
  528.                     SqlCommand cmd = new SqlCommand();
  529.                     try
  530.                     {
  531.                         //循环
  532.                         foreach (DictionaryEntry myDE in SQLStringList)
  533.                         {
  534.                             string cmdText = myDE.Key.ToString();
  535.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  536.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  537.                             int val = cmd.ExecuteNonQuery();
  538.                             cmd.Parameters.Clear();
  539.                         }
  540.                         trans.Commit();
  541.                     }
  542.                     catch
  543.                     {
  544.                         trans.Rollback();
  545.                         throw;
  546.                     }
  547.                 }
  548.             }
  549.         }
  550.       
  551.         /// <summary>
  552.         /// 执行多条SQL语句,实现数据库事务。
  553.         /// </summary>
  554.         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
  555.         public static void ExecuteSqlTranWithIndentity(Hashtable SQLStringList)
  556.         {
  557.             using (SqlConnection conn = new SqlConnection(connectionString))
  558.             {
  559.                 conn.Open();
  560.                 using (SqlTransaction trans = conn.BeginTransaction())
  561.                 {
  562.                     SqlCommand cmd = new SqlCommand();
  563.                     try
  564.                     {
  565.                         int indentity = 0;
  566.                         //循环
  567.                         foreach (DictionaryEntry myDE in SQLStringList)
  568.                         {
  569.                             string cmdText = myDE.Key.ToString();
  570.                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
  571.                             foreach (SqlParameter q in cmdParms)
  572.                             {
  573.                                 if (q.Direction == ParameterDirection.InputOutput)
  574.                                 {
  575.                                     q.Value = indentity;
  576.                                 }
  577.                             }
  578.                             PrepareCommand(cmd, conn, trans, cmdText, cmdParms);
  579.                             int val = cmd.ExecuteNonQuery();
  580.                             foreach (SqlParameter q in cmdParms)
  581.                             {
  582.                                 if (q.Direction == ParameterDirection.Output)
  583.                                 {
  584.                                     indentity = Convert.ToInt32(q.Value);
  585.                                 }
  586.                             }
  587.                             cmd.Parameters.Clear();
  588.                         }
  589.                         trans.Commit();
  590.                     }
  591.                     catch
  592.                     {
  593.                         trans.Rollback();
  594.                         throw;
  595.                     }
  596.                 }
  597.             }
  598.         }
  599.         /// <summary>
  600.         /// 执行一条计算查询结果语句,返回查询结果(object)。
  601.         /// </summary>
  602.         /// <param name="SQLString">计算查询结果语句</param>
  603.         /// <returns>查询结果(object)</returns>
  604.         public static object GetSingle(string SQLString, params SqlParameter[] cmdParms)
  605.         {
  606.             using (SqlConnection connection = new SqlConnection(connectionString))
  607.             {
  608.                 using (SqlCommand cmd = new SqlCommand())
  609.                 {
  610.                     try
  611.                     {
  612.                         PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  613.                         object obj = cmd.ExecuteScalar();
  614.                         cmd.Parameters.Clear();
  615.                         if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  616.                         {
  617.                             return null;
  618.                         }
  619.                         else
  620.                         {
  621.                             return obj;
  622.                         }
  623.                     }
  624.                     catch (System.Data.SqlClient.SqlException e)
  625.                     {
  626.                         throw e;
  627.                     }
  628.                 }
  629.             }
  630.         }

  631.         /// <summary>
  632.         /// (重载) 执行一条计算查询结果语句,返回查询结果(object)。
  633.         /// </summary>
  634.         /// <param name="connection">SqlConnection对象</param>
  635.         /// <param name="trans">SqlTransaction事务</param>
  636.         /// <param name="SQLString">计算查询结果语句</param>
  637.         /// <returns>查询结果(object)</returns>
  638.         public static object GetSingle(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  639.         {
  640.             using (SqlCommand cmd = new SqlCommand())
  641.             {
  642.                 try
  643.                 {
  644.                     PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  645.                     object obj = cmd.ExecuteScalar();
  646.                     cmd.Parameters.Clear();
  647.                     if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
  648.                     {
  649.                         return null;
  650.                     }
  651.                     else
  652.                     {
  653.                         return obj;
  654.                     }
  655.                 }
  656.                 catch (System.Data.SqlClient.SqlException e)
  657.                 {
  658.                     //trans.Rollback();
  659.                     throw e;
  660.                 }
  661.             }
  662.         }

  663.         /// <summary>
  664.         /// 执行查询语句,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  665.         /// </summary>
  666.         /// <param name="strSQL">查询语句</param>
  667.         /// <returns>SqlDataReader</returns>
  668.         public static SqlDataReader ExecuteReader(string SQLString, params SqlParameter[] cmdParms)
  669.         {
  670.             SqlConnection connection = new SqlConnection(connectionString);
  671.             SqlCommand cmd = new SqlCommand();
  672.             try
  673.             {
  674.                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  675.                 SqlDataReader myReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  676.                 cmd.Parameters.Clear();
  677.                 return myReader;
  678.             }
  679.             catch (System.Data.SqlClient.SqlException e)
  680.             {
  681.                 throw e;
  682.             }
  683.             //                        finally
  684.             //                        {
  685.             //                                cmd.Dispose();
  686.             //                                connection.Close();
  687.             //                        }        

  688.         }

  689.         /// <summary>
  690.         /// 执行查询语句,返回DataSet
  691.         /// </summary>
  692.         /// <param name="SQLString">查询语句</param>
  693.         /// <returns>DataSet</returns>
  694.         public static DataSet Query(string SQLString, params SqlParameter[] cmdParms)
  695.         {
  696.             using (SqlConnection connection = new SqlConnection(connectionString))
  697.             {
  698.                 SqlCommand cmd = new SqlCommand();
  699.                 PrepareCommand(cmd, connection, null, SQLString, cmdParms);
  700.                 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  701.                 {
  702.                     DataSet ds = new DataSet();
  703.                     try
  704.                     {
  705.                         da.Fill(ds, "ds");
  706.                         cmd.Parameters.Clear();
  707.                     }
  708.                     catch (System.Data.SqlClient.SqlException ex)
  709.                     {
  710.                         throw new Exception(ex.Message);
  711.                     }
  712.                     return ds;
  713.                 }
  714.             }
  715.         }

  716.         /// <summary>
  717.         /// (重载) 执行查询语句,返回DataSet
  718.         /// </summary>
  719.         /// <param name="connection">SqlConnection对象</param>
  720.         /// <param name="trans">SqlTransaction事务</param>
  721.         /// <param name="SQLString">查询语句</param>
  722.         /// <returns>DataSet</returns>
  723.         public static DataSet Query(SqlConnection connection, SqlTransaction trans, string SQLString, params SqlParameter[] cmdParms)
  724.         {
  725.             SqlCommand cmd = new SqlCommand();
  726.             PrepareCommand(cmd, connection, trans, SQLString, cmdParms);
  727.             using (SqlDataAdapter da = new SqlDataAdapter(cmd))
  728.             {
  729.                 DataSet ds = new DataSet();
  730.                 try
  731.                 {
  732.                     da.Fill(ds, "ds");
  733.                     cmd.Parameters.Clear();
  734.                 }
  735.                 catch (System.Data.SqlClient.SqlException ex)
  736.                 {
  737.                     //trans.Rollback();
  738.                     throw new Exception(ex.Message);
  739.                 }
  740.                 return ds;
  741.             }
  742.         }


  743.         private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, string cmdText, SqlParameter[] cmdParms)
  744.         {
  745.             if (conn.State != ConnectionState.Open)
  746.                 conn.Open();
  747.             cmd.Connection = conn;
  748.             cmd.CommandText = cmdText;
  749.             if (trans != null)
  750.                 cmd.Transaction = trans;
  751.             cmd.CommandType = CommandType.Text;//cmdType;
  752.             if (cmdParms != null)
  753.             {


  754.                 foreach (SqlParameter parameter in cmdParms)
  755.                 {
  756.                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  757.                         (parameter.Value == null))
  758.                     {
  759.                         parameter.Value = DBNull.Value;
  760.                     }
  761.                     cmd.Parameters.Add(parameter);
  762.                 }
  763.             }
  764.         }

  765.         #endregion

  766.         #region 存储过程操作

  767.         public static int Crm_ExecuteNonQuery(string strSql)
  768.         {
  769.             int result = 0;
  770.             using (SqlConnection con = new SqlConnection(connectionString))
  771.             {
  772.                 if (con.State == ConnectionState.Closed)
  773.                     con.Open();
  774.                 using (SqlCommand cmd = new SqlCommand(strSql, con))
  775.                 {
  776.                     result = cmd.ExecuteNonQuery();
  777.                 }
  778.                 con.Close();

  779.                 return result;
  780.             }
  781.         }

  782.         public static int Crm_ExecuteNonQuery(string strProcedure, SqlParameter[] param)
  783.         {
  784.             int result = 0;
  785.             using (SqlConnection con = new SqlConnection(connectionString))
  786.             {
  787.                 if (con.State == ConnectionState.Closed)
  788.                     con.Open();
  789.                 using (SqlCommand cmd = new SqlCommand())
  790.                 {
  791.                     cmd.CommandType = CommandType.StoredProcedure;
  792.                     cmd.CommandText = strProcedure;
  793.                     cmd.Connection = con;

  794.                     foreach (var item in param)
  795.                     {
  796.                         cmd.Parameters.Add(item);
  797.                     }

  798.                     result = cmd.ExecuteNonQuery();
  799.                 }

  800.                 con.Close();

  801.                 return result;
  802.             }
  803.         }

  804.         /// <summary>
  805.         /// 执行存储过程,返回SqlDataReader ( 注意:调用该方法后,一定要对SqlDataReader进行Close )
  806.         /// </summary>
  807.         /// <param name="storedProcName">存储过程名</param>
  808.         /// <param name="parameters">存储过程参数</param>
  809.         /// <returns>SqlDataReader</returns>
  810.         public static SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters)
  811.         {
  812.             SqlConnection connection = new SqlConnection(connectionString);
  813.             SqlDataReader returnReader;
  814.             connection.Open();
  815.             SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  816.             command.CommandType = CommandType.StoredProcedure;
  817.             returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
  818.             return returnReader;

  819.         }


  820.         /// <summary>
  821.         /// 执行存储过程
  822.         /// </summary>
  823.         /// <param name="storedProcName">存储过程名</param>
  824.         /// <param name="parameters">存储过程参数</param>
  825.         /// <param name="tableName">DataSet结果中的表名</param>
  826.         /// <returns>DataSet</returns>
  827.         public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName)
  828.         {
  829.             using (SqlConnection connection = new SqlConnection(connectionString))
  830.             {
  831.                 DataSet dataSet = new DataSet();
  832.                 connection.Open();
  833.                 SqlDataAdapter sqlDA = new SqlDataAdapter();
  834.                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  835.                 sqlDA.Fill(dataSet, tableName);
  836.                 connection.Close();
  837.                 return dataSet;
  838.             }
  839.         }
  840.         public static DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName, int Times)
  841.         {
  842.             using (SqlConnection connection = new SqlConnection(connectionString))
  843.             {
  844.                 DataSet dataSet = new DataSet();
  845.                 connection.Open();
  846.                 SqlDataAdapter sqlDA = new SqlDataAdapter();
  847.                 sqlDA.SelectCommand = BuildQueryCommand(connection, storedProcName, parameters);
  848.                 sqlDA.SelectCommand.CommandTimeout = Times;
  849.                 sqlDA.Fill(dataSet, tableName);
  850.                 connection.Close();
  851.                 return dataSet;
  852.             }
  853.         }


  854.         /// <summary>
  855.         /// 构建 SqlCommand 对象(用来返回一个结果集,而不是一个整数值)
  856.         /// </summary>
  857.         /// <param name="connection">数据库连接</param>
  858.         /// <param name="storedProcName">存储过程名</param>
  859.         /// <param name="parameters">存储过程参数</param>
  860.         /// <returns>SqlCommand</returns>
  861.         private static SqlCommand BuildQueryCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  862.         {
  863.             SqlCommand command = new SqlCommand(storedProcName, connection);
  864.             command.CommandType = CommandType.StoredProcedure;
  865.             foreach (SqlParameter parameter in parameters)
  866.             {
  867.                 if (parameter != null)
  868.                 {
  869.                     // 检查未分配值的输出参数,将其分配以DBNull.Value.
  870.                     if ((parameter.Direction == ParameterDirection.InputOutput || parameter.Direction == ParameterDirection.Input) &&
  871.                         (parameter.Value == null))
  872.                     {
  873.                         parameter.Value = DBNull.Value;
  874.                     }
  875.                     command.Parameters.Add(parameter);
  876.                 }
  877.             }

  878.             return command;
  879.         }

  880.         /// <summary>
  881.         /// 执行存储过程,返回影响的行数               
  882.         /// </summary>
  883.         /// <param name="storedProcName">存储过程名</param>
  884.         /// <param name="parameters">存储过程参数</param>
  885.         /// <param name="rowsAffected">影响的行数</param>
  886.         /// <returns></returns>
  887.         public static int RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected)
  888.         {
  889.             using (SqlConnection connection = new SqlConnection(connectionString))
  890.             {
  891.                 int result;
  892.                 connection.Open();
  893.                 SqlCommand command = BuildIntCommand(connection, storedProcName, parameters);
  894.                 rowsAffected = command.ExecuteNonQuery();
  895.                 result = (int)command.Parameters["ReturnValue"].Value;
  896.                 //Connection.Close();
  897.                 return result;
  898.             }
  899.         }

  900.         /// <summary>
  901.         /// 创建 SqlCommand 对象实例(用来返回一个整数值)        
  902.         /// </summary>
  903.         /// <param name="storedProcName">存储过程名</param>
  904.         /// <param name="parameters">存储过程参数</param>
  905.         /// <returns>SqlCommand 对象实例</returns>
  906.         private static SqlCommand BuildIntCommand(SqlConnection connection, string storedProcName, IDataParameter[] parameters)
  907.         {
  908.             SqlCommand command = BuildQueryCommand(connection, storedProcName, parameters);
  909.             command.Parameters.Add(new SqlParameter("ReturnValue",
  910.                 SqlDbType.Int, 4, ParameterDirection.ReturnValue,
  911.                 false, 0, 0, string.Empty, DataRowVersion.Default, null));
  912.             return command;
  913.         }
  914.         #endregion
  915.     }
  916. }
复制代码






上一篇:c# 线程安全 与 lock锁
下一篇:Discuz没有找到帖子pre_forum_post表数据丢失
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
发表于 2016-6-14 10:53:06 | 显示全部楼层
我有全的,还有几个执行事务的,和执行Sql和Oracle滴混合事务,向数据库里插入图像格式的字段
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2026-6-26 12:41

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表