苏飞论坛

标题: [SqlHelper] 看大家都在发,我也发出我写的,欢迎指教。 [打印本页]

作者: xiaomu    时间: 2013-9-28 18:25
标题: [SqlHelper] 看大家都在发,我也发出我写的,欢迎指教。
本帖最后由 xiaomu 于 2013-9-29 13:43 编辑

看大家都在发,我也发出我写的,小学毕业,自学成渣,欢迎指教。
  1. class SqlHelper//by.穆建情 2013-09-28
  2.     {
  3.         #region //SqlConnectionStr
  4.         /// <summary>
  5.         /// 数据库连接字符串
  6.         /// </summary>
  7.         private static string connStr = ConfigurationManager.ConnectionStrings["connStr"].ConnectionString;

  8.         #endregion

  9.         #region //ExecteQuery

  10.         /// <summary>
  11.         /// 执行 Transact-SQL 查询语句并返回DataTable.
  12.         /// </summary>
  13.         /// <param name="sqlStr">存储过程或者T-SQL语句</param>
  14.         /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
  15.         /// <returns>返回一个查询结果集DataTable</returns>
  16.         public static DataTable ExecteTable(string sqlStr, params SqlParameter[] Parameters)
  17.         {
  18.             using (SqlConnection conn = new SqlConnection(connStr))
  19.             {
  20.                 conn.Open();
  21.                 using (SqlCommand cmd = conn.CreateCommand())
  22.                 {
  23.                     cmd.CommandText = sqlStr.Trim();
  24.                     cmd.Parameters.AddRange(Parameters);
  25.                     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  26.                     {
  27.                         DataTable dt = new DataTable();
  28.                         adapter.Fill(dt);
  29.                         return dt;
  30.                     }
  31.                 }
  32.             }
  33.         }

  34.         /// <summary>
  35.         /// 执行 Transact-SQL 查询语句并返回DataTable.
  36.         /// </summary>
  37.         /// <param name="sqlStr">存储过程或者T-SQL语句</param>
  38.         ///<param name="cmdType">SqlCommand命令类型 (存储过程,T-SQL语句,等等.)</param>
  39.         /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
  40.         /// <returns>返回一个查询结果集DataTable</returns>
  41.         public static DataTable ExecteTable(string sqlStr, CommandType cmdType, params SqlParameter[] Parameters)
  42.         {
  43.             using (SqlConnection conn = new SqlConnection(connStr))
  44.             {
  45.                 conn.Open();
  46.                 using (SqlCommand cmd = conn.CreateCommand())
  47.                 {
  48.                     cmd.CommandText = sqlStr.Trim();
  49.                     cmd.CommandType = cmdType;
  50.                     cmd.Parameters.AddRange(Parameters);
  51.                     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  52.                     {
  53.                         DataTable dt = new DataTable();
  54.                         adapter.Fill(dt);
  55.                         return dt;
  56.                     }
  57.                 }
  58.             }
  59.         }

  60.         /// <summary>
  61.         /// 执行 Transact-SQL 查询语句并返回DataSet.
  62.         /// </summary>
  63.         /// <param name="cmdText">存储过程或者T-SQL语句</param>
  64.         /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
  65.         /// <returns>返回一个查询结果集DataSet</returns>
  66.         public static DataSet ExecteDataSet(string sqlStr, params SqlParameter[] Parameters)
  67.         {
  68.             using (SqlConnection conn = new SqlConnection(connStr))
  69.             {
  70.                 conn.Open();
  71.                 using (SqlCommand cmd = conn.CreateCommand())
  72.                 {
  73.                     cmd.CommandText = sqlStr.Trim();
  74.                     cmd.Parameters.AddRange(Parameters);
  75.                     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  76.                     {
  77.                         DataSet ds = new DataSet();
  78.                         adapter.Fill(ds);
  79.                         return ds;
  80.                     }
  81.                 }
  82.             }
  83.         }

  84.         /// <summary>
  85.         /// 执行 Transact-SQL 查询语句并返回DataSet.
  86.         /// </summary>
  87.         /// <param name="cmdText">存储过程或者T-SQL语句</param>
  88.         /// <param name="cmdType">SqlCommand命令类型 (存储过程,T-SQL语句,等等.)</param>
  89.         /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
  90.         /// <returns>返回一个查询结果集DataSet</returns>
  91.         public static DataSet ExecteDataSet(string sqlStr, CommandType cmdType, params SqlParameter[] Parameters)
  92.         {
  93.             using (SqlConnection conn = new SqlConnection(connStr))
  94.             {
  95.                 conn.Open();
  96.                 using (SqlCommand cmd = conn.CreateCommand())
  97.                 {
  98.                     cmd.CommandText = sqlStr.Trim();
  99.                     cmd.CommandType = cmdType;
  100.                     cmd.Parameters.AddRange(Parameters);
  101.                     using (SqlDataAdapter adapter = new SqlDataAdapter(cmd))
  102.                     {
  103.                         DataSet ds = new DataSet();
  104.                         adapter.Fill(ds);
  105.                         return ds;
  106.                     }
  107.                 }
  108.             }
  109.         }

  110.         /// <summary>
  111.         /// 执行 Transact-SQL 查询语句并返回SqlDataReader.
  112.         /// </summary>
  113.         /// <param name="cmdText">存储过程或者T-SQL语句</param>
  114.         /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
  115.         /// <returns>返回一个SqlDataReader</returns>
  116.         public static SqlDataReader ExecteReader(string sqlStr, params SqlParameter[] Parameters)
  117.         {
  118.             SqlConnection conn = new SqlConnection(connStr);
复制代码

作者: xiaomu    时间: 2013-9-28 18:41
本帖最后由 xiaomu 于 2013-9-29 09:49 编辑

由于帖子长度限制不能完全发出,完整代码打包附件了。
另外谢谢"站长苏飞 "提出的一处bug。{:soso_e121:}
作者: 站长苏飞    时间: 2013-9-29 08:03
[code=csharp]/// <summary>
        /// 执行 Transact-SQL 查询语句并返回SqlDataReader.
        /// </summary>
        /// <param name="cmdText">存储过程或者T-SQL语句</param>
        /// <param name="cmdType">SqlCommand命令类型 (存储过程,T-SQL语句,等等.)</param>
        /// <param name="Parameters">以数组形式提供SqlCommand命令中的参数</param>
        /// <returns>返回一个SqlDataReader</returns>
        public static SqlDataReader ExecteReader(string sqlStr, CommandType cmdType, params SqlParameter[] Parameters)
        {
            using (SqlConnection conn = new SqlConnection(connStr))
            {
                conn.Open();
                using (SqlCommand cmd = conn.CreateCommand())
                {
                    cmd.CommandText = sqlStr.Trim();
                    cmd.CommandType = cmdType;
                    cmd.Parameters.AddRange(Parameters);
                    SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    return reader;
                }
            }
        }[/code]
这个方法你应该是从来都没有用过吧,
SqlDataReader 里都使用Using把SqlConnection都关闭了,还怎么让人读啊。

作者: 站长苏飞    时间: 2013-9-29 08:04
可以参考下我的
http://www.sufeinet.com/thread-12-1-1.html
作者: xiaomu    时间: 2013-9-29 09:32
恩 应该去掉 SqlConnection 的 using
作者: 站长苏飞    时间: 2013-9-29 09:36
最好把这个参数也加上
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
作者: xiaomu    时间: 2013-9-29 09:47
站长苏飞 发表于 2013-9-29 09:36
最好把这个参数也加上
SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

那个必须加哇。加了的

作者: xiaomu    时间: 2013-9-29 12:05
本帖最后由 xiaomu 于 2013-9-29 13:42 编辑

补充一个SqlBulkCopy方法
  1. #region//SqlBulkCopy

  2.         /// <summary>
  3.         /// 批量复制数据到数据库表。
  4.         /// </summary>
  5.         /// <param name="conn">数据库连接对象</param>
  6.         /// <param name="table">DataTable对象,TableName要与目标库中Table名称一致</param>
  7.         /// <returns>成功返回true,失败返回异常</returns>
  8.         public static bool SqlBulkCopy(SqlConnection conn, DataTable table)
  9.         {
  10.             if (conn.State != ConnectionState.Open) { conn.Open(); }
  11.             using (SqlTransaction transaction = conn.BeginTransaction())
  12.             {
  13.                 using (SqlBulkCopy sbc = new SqlBulkCopy(conn, SqlBulkCopyOptions.CheckConstraints, transaction))
  14.                 {
  15.                     try
  16.                     {
  17.                         //sbc.BulkCopyTimeout = 600;
  18.                         sbc.NotifyAfter = table.Rows.Count;
  19.                         sbc.DestinationTableName = table.TableName;
  20.                         sbc.WriteToServer(table);
  21.                         transaction.Commit();
  22.                         return true;
  23.                     }
  24.                     catch (Exception e)
  25.                     {
  26.                         transaction.Rollback();
  27.                         throw new Exception(e.Message);
  28.                     }
  29.                     finally//应该由外部调用时using
  30.                     {
  31.                         conn.Close();
  32.                     }
  33.                 }
  34.             }
  35.         }

  36.         /// <summary>
  37.         /// 批量复制数据到数据库表。
  38.         /// </summary>
  39.         /// <param name="conn">数据库连接对象</param>
  40.         /// <param name="tableName">目标数据库表名</param>
  41.         /// <param name="Reader">SqlDataReader对象</param>
  42.         /// <returns>成功返回true,失败返回异常</returns>
  43.         public static bool SqlBulkCopy(SqlConnection conn, string tableName, SqlDataReader Reader)
  44.         {
复制代码





欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4