淡淡回忆 发表于 2015-6-28 11:41:33

SQL Server数据库访问通用类

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




1 using System;
2using System.Data;
3using System.Configuration;
4using System.Data.SqlClient;
5///
6///针对sql server数据库操作的通用类
7///
8public class SqlHelper
9 {
10   public SqlHelper()
11   {
12         //
13         //TODO: 在此处添加构造函数逻辑
14         //
15      }
16   private string connectionstring;
17   ///
18   /// 设置连接字符串
19   ///
20      public string connectionstring
21   {
22         set { connectionstring = value; }
23   }
24   ///
25   /// 构造函数
26   ///
27   /// 数据库连接字符串
28   ///
29      public SqlHelper(string connectionstring)
30   {
31         this .connectionstring =connectionstring ;
32   }
33
34
35
36   ///
37   /// 执行一个查询,并返回结果集
38   ///
39   /// 要执行的查询sql文本命令
40   /// 返回查询结果集
41      public DataTable ExecuteDataTable(string sql)
42   {
43         return ExecuteDataTable(sql,CommandType.Text ,null);
44   }
45   ///
46   /// 执行一个查询,并返回查询结果
47   ///
48   /// 要执行的sql语句
49   /// 要执行的查询语句的类型,如存储过程或sql文本命令
50   /// 返回查询结果集
51   public DataTable ExecuteDataTable(string sql,CommandType commandType)
52   {
53         return ExecuteDataTable(sql ,commandType ,null );
54   }
55   ///
56   /// 执行一个查询,并且返回查询结果
57   ///
58   /// 要执行的sql语句
59   /// 要执行的查询语句的类型,如存储过程或sql文本命令
60   /// Transact-SQL语句或存储过程的参数数组
61   ///
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   ///
89   /// 返回一个sqldatareader对象的实例
90   ///
91   /// 要执行的查询sql文本命令
92   ///
93   public SqlDataReader ExecuteReader(string sql)
94   {
95         return ExecuteReader(sql ,CommandType.Text ,null );
96   }
97   ///
98   /// 返回一个sqldatareader对象的实例
99   ///
100   /// 要执行的查询sql文本命令
101   /// 要执行的查询语句的类型,如存储过程或sql文本命令
102   ///
103   public SqlDataReader ExecuteReader(string sql,CommandTypecommandtype)
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   ///
127   /// 执行一个查询,返回查询结果集的第一行,忽略其他的行和列
128   ///
129   /// 要执行的查询sql文本命令
130   ///
131   public Object ExecuteScalar(string sql)
132   {
133         return ExecuteScalar(sql,CommandType .Text ,null);
134   }
135   ///
136   ///执行一个查询,返回查询结果集的第一行,忽略其他的行和列
137   ///
138   /// 要执行的SQL语句
139   /// 要执行的查询语句的类型,如存储过程或sql文本命令
140   ///
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   ///
170   /// 对数据库实行增删改操作
171   ///
172   /// 要执行的查询Sql文本命令
173   ///
174   public int ExecuteNonQuery(string sql)
175   {
176         return ExecuteNonQuery(sql,CommandType .Text ,null );
177   }
178   ///
179   /// 对数据库实行增删改操作
180   ///
181   /// 要执行的查询Sql文本命令
182   /// 要执行的查询语句的类型,如存储过程或sql文本命令
183   ///
184   public int ExecuteNonQuery(string sql,CommandType commandtype)
185   {
186         return ExecuteNonQuery(sql, CommandType.Text, null);
187   }
188   ///
189   /// 对数据库实行增删改操作
190   ///
191   /// 要执行的查询Sql文本命令
192   /// 要执行的查询语句的类型,如存储过程或sql文本命令
193   /// 要执行的查询语句的类型,如存储过程或sql文本命令
194   ///
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   ///
221   /// 返回当前连接的数据库中所有由用户创建的数据库
222   ///
223   ///
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
页: [1]
查看完整版本: SQL Server数据库访问通用类