SQL Server数据库访问通用类

      看完了周金桥老师《asp.net夜话》中关于三层架构的章节后,总算对三层架构有了一定的了解,书中写到了一个SQL Server数据库访问通用类,自我感觉写得非常好,所以花了点时间亲自敲了一边,注释写得很详细,稍微有点asp.net编程基础的人应该都能够看得懂,在下面的代码中除了返回ExecuteDataReader()方法外,都考虑了异常情况,这样的代码保证了即使出现异常,数据库连接对象也会得到关闭,这是通过using关键字来实现的。在这里给大家分享:

 

1 using System;
2  using System.Data;
3  using System.Configuration;
4  using System.Data.SqlClient;
5  /// <summary>
6  ///针对sql server数据库操作的通用类
7  /// </summary>
8  public class SqlHelper
9 {
10 public SqlHelper()
11 {
12 //
13 //TODO: 在此处添加构造函数逻辑
14 //
15   }
16 private string connectionstring;
17 /// <summary>
18 /// 设置连接字符串
19 /// </summary>
20   public string connectionstring
21 {
22 set { connectionstring = value; }
23 }
24 /// <summary>
25 /// 构造函数
26 /// </summary>
27 /// <param name="connectionstring">数据库连接字符串</param>
28 /// <returns></returns>
29   public SqlHelper(string connectionstring)
30 {
31 this .connectionstring =connectionstring ;
32 }
33
34
35
36 /// <summary>
37 /// 执行一个查询,并返回结果集
38 /// </summary>
39 /// <param name="sql">要执行的查询sql文本命令</param>
40 /// <returns>返回查询结果集</returns>
41   public DataTable ExecuteDataTable(string sql)
42 {
43 return ExecuteDataTable(sql,CommandType.Text ,null);
44 }
45 /// <summary>
46 /// 执行一个查询,并返回查询结果
47 /// </summary>
48 /// <param name="sql">要执行的sql语句</param>
49 /// <param name="commandType">要执行的查询语句的类型,如存储过程或sql文本命令</param>
50 /// <returns>返回查询结果集</returns>
51 public DataTable ExecuteDataTable(string sql,CommandType commandType)
52 {
53 return ExecuteDataTable(sql ,commandType ,null );
54 }
55 /// <summary>
56 /// 执行一个查询,并且返回查询结果
57 /// </summary>
58 /// <param name="sql">要执行的sql语句</param>
59 /// <param name="commandType">要执行的查询语句的类型,如存储过程或sql文本命令</param>
60 /// <param name="parameters">Transact-SQL语句或存储过程的参数数组</param>
61 /// <returns></returns>
62 public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)
63 {
64 DataTable data = new DataTable();//实例化datatable,用于装载查询结果集
65 using (SqlConnection connection= new SqlConnection(connectionstring))
66 {
67 using (SqlCommand command = new SqlCommand(sql, connection))
68 {
69 command.CommandType = commandType;//设置command的commandtype为制定的commandtype
70 //如果同时传入的参数,则添加这些参数
71 if(parameters !=null )
72 {
73 foreach (SqlParameter parameter in parameters)
74 {
75 command.Parameters.Add(parameters);
76 }
77 }
78 //通过包含查询SQL的sqlcommand实例来实例化sqldataadapter
79 SqlDataAdapter adapter = new SqlDataAdapter(command);
80 adapter.Fill(data);//填充DataTable
81 }
82 }
83 return data;
84 }
85
86
87
88 /// <summary>
89 /// 返回一个sqldatareader对象的实例
90 /// </summary>
91 /// <param name="sql">要执行的查询sql文本命令</param>
92 /// <returns></returns>
93 public SqlDataReader ExecuteReader(string sql)
94 {
95 return ExecuteReader(sql ,CommandType.Text ,null );
96 }
97 /// <summary>
98 /// 返回一个sqldatareader对象的实例
99 /// </summary>
100 /// <param name="sql">要执行的查询sql文本命令</param>
101 /// <param name="commandtype">要执行的查询语句的类型,如存储过程或sql文本命令</param>
102 /// <returns></returns>
103 public SqlDataReader ExecuteReader(string sql,CommandType commandtype)
104 {
105 return ExecuteReader(sql,commandtype,null );
106 }
107 public SqlDataReader ExecuteReader(string sql, CommandType commandtype, SqlParameter[] parameters)
108 {
109 SqlConnection connection = new SqlConnection(connectionstring);
110 SqlCommand command = new SqlCommand(sql,connection);
111 //如果传入了参数,则添加这些参数
112 if (parameters != null)
113 {
114 foreach (SqlParameter parameters in parameters)
115 {
116 command.Parameters.Add(parameters );
117 }
118 }
119 connection.Open();
120 //CommandBehavior .CloseConnection参数指示关闭Reader对象时关闭与其关联的connection对象
121 return command.ExecuteReader(CommandBehavior .CloseConnection);
122 }
123
124
125
126 /// <summary>
127 /// 执行一个查询,返回查询结果集的第一行,忽略其他的行和列
128 /// </summary>
129 /// <param name="sql">要执行的查询sql文本命令</param>
130 /// <returns></returns>
131 public Object ExecuteScalar(string sql)
132 {
133 return ExecuteScalar(sql,CommandType .Text ,null);
134 }
135 /// <summary>
136 /// 执行一个查询,返回查询结果集的第一行,忽略其他的行和列
137 /// </summary>
138 /// <param name="sql">要执行的SQL语句</param>
139 /// <param name="commandtype">要执行的查询语句的类型,如存储过程或sql文本命令</param>
140 /// <returns></returns>
141 public Object ExecuteScalar(string sql,CommandType commandtype)
142 {
143 return ExecuteScalar(sql, CommandType.Text, null);
144 }
145 public Object ExecuteScalar(string sql,CommandType commandtype,SqlParameter[] parameter)
146 {
147 object result = null;
148 using (SqlConnection connection = new SqlConnection(connectionstring))
149 {
150 using (SqlCommand command = new SqlCommand(sql, connection))
151 {
152 command.CommandType = commandtype;//设置command的commandtype为指定的commandtype
153 //如果同时传入了参数,则添加这些参数
154 if (parameter != null)
155 {
156 foreach (SqlParameter parameters in parameter)
157 {
158 command.Parameters.Add(parameter);
159 }
160 }
161 connection.Open();//打开数据库
162 result = command.ExecuteScalar();
163 }
164 }
165 return result;//返回查询结果的第一行和第一列,忽略其他行和列
166 }
167
168
169 /// <summary>
170 /// 对数据库实行增删改操作
171 /// </summary>
172 /// <param name="sql">要执行的查询Sql文本命令</param>
173 /// <returns></returns>
174 public int ExecuteNonQuery(string sql)
175 {
176 return ExecuteNonQuery(sql,CommandType .Text ,null );
177 }
178 /// <summary>
179 /// 对数据库实行增删改操作
180 /// </summary>
181 /// <param name="sql">要执行的查询Sql文本命令</param>
182 /// <param name="commandtype">要执行的查询语句的类型,如存储过程或sql文本命令</param>
183 /// <returns></returns>
184 public int ExecuteNonQuery(string sql,CommandType commandtype)
185 {
186 return ExecuteNonQuery(sql, CommandType.Text, null);
187 }
188 /// <summary>
189 /// 对数据库实行增删改操作
190 /// </summary>
191 /// <param name="sql">要执行的查询Sql文本命令</param>
192 /// <param name="commandtype">要执行的查询语句的类型,如存储过程或sql文本命令</param>
193 /// <param name="parameters">要执行的查询语句的类型,如存储过程或sql文本命令</param>
194 /// <returns></returns>
195 public int ExecuteNonQuery(string sql,CommandType commandtype,SqlParameter[] parameters )
196 {
197 int count = 0;
198 using (SqlConnection connection = new SqlConnection(connectionstring))
199 {
200 using (SqlCommand command = new SqlCommand(sql, connection))
201 {
202 command.CommandType = commandtype;//设置command的commandtype为制定commandtype
203 //如果同时传入了参数,则添加这些参数
204 if (parameters != null)
205 {
206 foreach (SqlParameter parameter in parameters)
207 {
208 command.Parameters.Add(parameters);
209 }
210 }
211 connection.Open();//打开数据库连接
212 count = command.EndExecuteNonQuery();
213 }
214 }
215 return count;//执行增删改查操作后,返回数据库中受影响的行数
216 }
217
218
219
220 /// <summary>
221 /// 返回当前连接的数据库中所有由用户创建的数据库
222 /// </summary>
223 /// <returns></returns>
224 public DataTable GetTables()
225 {
226 DataTable data = null;
227 using (SqlConnection connection = new SqlConnection(connectionstring))
228 {
229 connection.Open();//打开数据库连接
230 data = connection.GetSchema("Tables");
231 }
232 return data;
233 }
234 }
235
posted @ 2010-04-16 21:16  imcode  阅读(2704)  评论(1编辑  收藏  举报