1 using System; using System.Data; using System.Configuration; using System.Web; using System.Data.SqlClient;
2
3 /// <summary> ///SQLHelper 的摘要说明 /// </summary> public class SQLHelper { public SQLHelper() { // //TODO: 在此处添加构造函数逻辑 // }
4
5 //获取数据库连接字符串,其属于静态变量且只读,项目中所有文档可以直接使用,但不能修改 public static readonly string StrCon = ConfigurationManager.AppSettings["strCon"]; public static readonly string ConStr = ConfigurationManager.AppSettings["con"];
6
7 private SqlConnection getConn() { SqlConnection conn = new SqlConnection(StrCon);
8
9 conn.Open();
10
11 return conn; } /// <summary> /// 为执行命令准备参数 /// </summary> /// <param name="cmd">SqlCommand 命令</param> /// <param name="conn">已经存在的数据库连接</param> /// <param name="trans">数据库事物处理</param> /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param> /// <param name="cmdParms">返回带参数的命令</param> private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) {
12
13 //判断数据库连接状态 if (conn.State != ConnectionState.Open) conn.Open();
14
15 cmd.Connection = conn; cmd.CommandText = cmdText;
16
17 //判断是否需要事物处理 if (trans != null) cmd.Transaction = trans;
18
19 cmd.CommandType = cmdType;
20
21 if (cmdParms != null) { foreach (SqlParameter parm in cmdParms) cmd.Parameters.Add(parm); } } /// <summary> /// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 /// 使用参数数组提供参数 /// </summary> /// <remarks> /// 使用示例: /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); /// </remarks> /// <param name="trans">一个存在的 sql 事物处理</param> /// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> /// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> public int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) { SqlCommand cmd = new SqlCommand(); PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); int val = cmd.ExecuteNonQuery(); cmd.Parameters.Clear(); return val; } ///// <summary> ///// 执行一条不返回结果的SqlCommand,通过一个已经存在的数据库事物处理 ///// 使用参数数组提供参数 ///// </summary> ///// <remarks> ///// 使用示例: ///// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); ///// </remarks> ///// <param name="trans">一个存在的 sql 事物处理</param> ///// <param name="commandType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> ///// <param name="commandText">存储过程的名字或者 T-SQL 语句</param> ///// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> ///// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> //public int ExecuteNonQuery(SqlTransaction trans, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) //{ // SqlCommand cmd = new SqlCommand(); // PrepareCommand(cmd, trans.Connection, trans, cmdType, cmdText, commandParameters); // int val = cmd.ExecuteNonQuery(); // cmd.Parameters.Clear(); // return val; //}
22
23 //查询 public SqlDataReader execQuery(string sql, SqlParameter[] parames) { SqlConnection conn = getConn();
24
25 SqlCommand comm = new SqlCommand(sql, conn);
26
27 if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } }
28
29 return comm.ExecuteReader(CommandBehavior.CloseConnection);
30
31 }
32
33 #region 重载查询 public SqlDataReader execQuery(string sql, SqlParameter[] parames,CommandType ct) { SqlConnection conn = getConn();
34
35 SqlCommand comm = new SqlCommand(sql, conn); comm.CommandType = ct; if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } }
36
37 return comm.ExecuteReader(CommandBehavior.CloseConnection);
38
39 } #endregion
40
41 //增删改 public int execNonQuery(string sql, SqlParameter[] parames) { SqlConnection conn = getConn();
42
43 SqlCommand comm = new SqlCommand(sql, conn);
44
45 if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } }
46
47 try { return comm.ExecuteNonQuery(); } catch (Exception e) { throw e; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); } } }
48
49 /// <summary> /// 返回DataSet /// </summary> /// <param name="sql">要执行的SQL语句</param> /// <param name="parames">需要的参数</param> /// <returns></returns> public DataSet execForDataSet(string sql, SqlParameter[] parames) { SqlConnection conn = getConn();
50
51 //SqlDataAdapter sda = new SqlDataAdapter(sql, conn); 无参数时使用
52
53 //有参数时使用 SqlCommand comm = new SqlCommand(sql, conn);
54
55 if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } }
56
57 SqlDataAdapter sda = new SqlDataAdapter(comm);
58
59 DataSet ds = new DataSet();
60
61 sda.Fill(ds);
62
63 return ds; }
64
65 /// <summary> /// 执行存储过程,返回DataSet /// </summary> /// <param name="sql"></param> /// <param name="parames"></param> /// <returns></returns> public DataSet execProc(string sql, SqlParameter[] parames, CommandType type) { SqlConnection conn = getConn();
66
67 SqlCommand comm = new SqlCommand(sql, conn); comm.CommandType = type;
68
69 if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } }
70
71 SqlDataAdapter sda = new SqlDataAdapter(comm);
72
73 DataSet ds = new DataSet();
74
75 sda.Fill(ds);
76
77 return ds;
78
79 }
80
81 /// <summary> /// 返回统计结果 /// </summary> /// <param name="sql"></param> /// <param name="parames"></param> /// <param name="type"></param> /// <returns></returns> public int execScalar(string sql, SqlParameter[] parames) { SqlConnection conn = getConn();
82
83 SqlCommand comm = new SqlCommand(sql, conn); comm.CommandType = CommandType.StoredProcedure;
84
85 if (parames != null) { foreach (SqlParameter para in parames) { comm.Parameters.Add(para); } } try { return Convert.ToInt32(comm.ExecuteScalar()); } catch (Exception e) { throw e; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); } }
86
87 }
88
89 #region 重载查询 public int execScalar(string sql) { SqlConnection conn = getConn();
90
91 SqlCommand comm = new SqlCommand(sql, conn); try { return Convert.ToInt32(comm.ExecuteScalar()); } catch (Exception e) { throw e; } finally { if (conn.State == ConnectionState.Open) { conn.Close(); conn.Dispose(); } }
92
93 } #endregion }