ASP.NET对SQLServer的通用数据库访问类

来源:互联网 发布:淘宝订阅南方周末 编辑:程序博客网 时间:2024/05/02 01:42
  1. /// <summary>
  2. /// 数据库访问通用类
  3. /// </summary>
  4. public class SqlHelper
  5. {
  6. private string connectionString;
  7. /// <summary>
  8. /// 设定数据库访问字符串
  9. /// </summary>
  10. public string ConnectionString
  11. {
  12. set { connectionString = value; }
  13. }
  14. /// <summary>
  15. /// 构造函数
  16. /// </summary>
  17. /// <param name="connectionString">数据库访问字符串</param>
  18. public SqlHelper(string connectionString)
  19. {
  20. this.connectionString = connectionString;
  21. }
  22. /// <summary>
  23. /// 执行一个查询,并返回查询结果
  24. /// </summary>
  25. /// <param name="sql">要执行的sql语句</param>
  26. /// <param name="commandType">要执行的查询语句的类型,如存储过程或者sql文本命令</param>
  27. /// <returns>返回查询结果集</returns>
  28. public DataTable ExecuteDataTable(string sql,CommandType commandType)
  29. {
  30. return ExecuteDataTable(sql, commandType, null);
  31. }
  32. /// <summary>
  33. /// 执行一个查询,并返回结果集
  34. /// </summary>
  35. /// <param name="sql">要执行的sql文本命令</param>
  36. /// <returns>返回查询的结果集</returns>
  37. public DataTable ExecuteDataTable(string sql)
  38. {
  39. return ExecuteDataTable(sql, CommandType.Text, null);
  40. }
  41. /// <summary>
  42. /// 执行一个查询,并返回查询结果
  43. /// </summary>
  44. /// <param name="sql">要执行的sql语句</param>
  45. /// <param name="commandtype">要执行查询语句的类型,如存储过程或者sql文本命令</param>
  46. /// <param name="parameters">Transact-SQL语句或者存储过程参数数组</param>
  47. /// <returns></returns>
  48. public DataTable ExecuteDataTable(string sql, CommandType commandtype, SqlParameter[] parameters)
  49. {
  50. DataTable data = new DataTable(); //实例化datatable,用于装载查询结果集
  51. using (SqlConnection con = new SqlConnection(connectionString))
  52. {
  53. using (SqlCommand cmd = new SqlCommand(sql, con))
  54. {
  55. cmd.CommandType = commandtype;//设置command的commandType为指定的Commandtype
  56. //如果同时传入了参数,则添加这些参数
  57. if (parameters != null)
  58. {
  59. foreach (SqlParameter parameter in parameters)
  60. {
  61. cmd.Parameters.Add(parameter);
  62. }
  63. }
  64. //通过包含查询sql的sqlcommand实例来实例化sqldataadapter
  65. SqlDataAdapter adapter = new SqlDataAdapter(cmd);
  66. adapter.Fill(data);//填充datatable
  67. }
  68. }
  69. return data;
  70. }
  71. /// <summary>
  72. /// 返回一个SqlDataReader对象的实例
  73. /// </summary>
  74. /// <param name="sql">要执行的SQl查询命令</param>
  75. /// <returns></returns>
  76. public SqlDataReader ExecuteReader(string sql)
  77. {
  78. return ExecuteReader(sql, CommandType.Text, null);
  79. }
  80. /// <summary>
  81. ///
  82. /// </summary>
  83. /// <param name="sql">要执行的sql语句</param>
  84. /// <param name="commandType">要执行查询语句的类型,如存储过程或者SQl文本命令</param>
  85. /// <returns></returns>
  86. public SqlDataReader ExecuteReader(string sql,CommandType commandType)
  87. {
  88. return ExecuteReader(sql, commandType, null);
  89. }
  90. /// <summary>
  91. /// 返回一个sqldatareader对象的实例
  92. /// </summary>
  93. /// <param name="sql"></param>
  94. /// <param name="commandType"></param>
  95. /// <param name="parameters"></param>
  96. /// <returns></returns>
  97. public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
  98. {
  99. SqlConnection con = new SqlConnection(connectionString);
  100. SqlCommand cmd = new SqlCommand(sql, con);
  101. if (parameters != null)
  102. {
  103. foreach (SqlParameter parameter in parameters)
  104. {
  105. cmd.Parameters.Add(parameters);
  106. }
  107. }
  108. con.Open();
  109. //CommandBehavior.CloseConnection参数指示关闭reader对象时关闭与其关联的Connection对象
  110. return cmd.ExecuteReader(CommandBehavior.CloseConnection);
  111. }
  112. /// <summary>
  113. /// 执行一个查询,返回结果集的首行首列。忽略其他行,其他列
  114. /// </summary>
  115. /// <param name="sql">要执行的SQl命令</param>
  116. /// <returns></returns>
  117. public Object ExecuteScalar(string sql)
  118. {
  119. return ExecuteScalar(sql, CommandType.Text, null);
  120. }
  121. /// <summary>
  122. ///
  123. /// </summary>
  124. /// <param name="sql"></param>
  125. /// <param name="commandType"></param>
  126. /// <returns></returns>
  127. public Object ExecuteScalar(string sql, CommandType commandType)
  128. {
  129. return ExecuteScalar(sql, commandType, null);
  130. }
  131. /// <summary>
  132. ///
  133. /// </summary>
  134. /// <param name="sql"></param>
  135. /// <param name="commandType">参数类型</param>
  136. /// <param name="parameters"></param>
  137. /// <returns></returns>
  138. public Object ExecuteScalar(string sql,CommandType commandType, SqlParameter[] parameters)
  139. {
  140. Object result=null;
  141. SqlConnection con=new SqlConnection(connectionString);
  142. SqlCommand cmd=new SqlCommand(sql,con);
  143. cmd.CommandType= commandType;
  144. if(parameters!=null)
  145. {
  146. foreach (SqlParameter parapmeter in parameters)
  147. {
  148. cmd.Parameters.Add(parapmeter);
  149. }
  150. }
  151. con.Open();
  152. result=cmd.ExecuteScalar();
  153. con.Close();
  154. return result;
  155. }
  156. /// <summary>
  157. /// 对数据库进行增删改的操作
  158. /// </summary>
  159. /// <param name="sql">要执行的sql命令</param>
  160. /// <returns></returns>
  161. public int ExecuteNonQuery(string sql)
  162. {
  163. return ExecuteNonQuery(sql, CommandType.Text, null);
  164. }
  165. /// <summary>
  166. /// 数据库进行增删改的操作
  167. /// </summary>
  168. /// <param name="sql">对数据库进行操作的sql命令</param>
  169. /// <param name="commandType">要执行查询语句的类型,如存储过程或者sql文本命令</param>
  170. /// <returns></returns>
  171. public int ExecuteNonQuery(string sql, CommandType commandType)
  172. {
  173. return ExecuteNonQuery(sql, commandType, null);
  174. }
  175. /// <summary>
  176. /// 对数据库进行增删改的操作
  177. /// </summary>
  178. /// <param name="sql">要执行的sql语句</param>
  179. /// <param name="commandType">要执行的查询语句类型,如存储过程或者sql文本命令</param>
  180. /// <param name="parameters">Transact-SQL语句或者存储过程的参数数组</param>
  181. /// <returns></returns>
  182. public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
  183. {
  184. int count = 0;
  185. SqlConnection con = new SqlConnection(connectionString);
  186. SqlCommand cmd = new SqlCommand(sql, con);
  187. cmd.CommandType = commandType;
  188. if (parameters != null)
  189. {
  190. foreach(SqlParameter parameter in parameters)
  191. {
  192. cmd.Parameters.Add(parameter);
  193. }
  194. }
  195. con.Open();
  196. count = cmd.ExecuteNonQuery();
  197. con.Close();
  198. return count;
  199. }
  200. /// <summary>
  201. /// 返回当前连接的数据库中所有用户创建的数据库
  202. /// </summary>
  203. /// <returns></returns>
  204. public DataTable GetTables()
  205. {
  206. DataTable table = null;
  207. using (SqlConnection con = new SqlConnection(connectionString))
  208. {
  209. con.Open();
  210. table = con.GetSchema("Tables");
  211. }
  212. return table;
  213. }
  214. }

如果我们建立了一个对数据库访问的通用类以后,在随数据库进行操作的时候吗,就只需要先实例化对象,然后根据自己的需要,调用相应的方法就可以完成对数据库的所有操作。这就是数据库访问层和业务逻辑层分开的好处。

这样书写的代码,可以大大的减少我们代码的复杂度。而且,繁琐度也大大的降低了。