之前了一个SqlHelper.cs  怪我没仔细看,漏洞太多了,我这就连夜又写了一个。。。。。代码同样没经过测试,因为我写的代码不需要测试,我相信我的代码。。。。一定跑不通

  1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4 using System.Collections;
5 using System.Data;
6 using System.Data.SqlClient;
7 using System.Configuration;
8
9 namespace Model
10 {
11 class SqlHelper
12 {
13 #region 通用方法
14
15 #region 变量
16 // 数据连接池
17 private static SqlConnection con;
18 /// <summary>
19 /// 创建连接的初始化函数
20 /// </summary>
21 /// <returns></returns>
22 private static SqlConnection GetCon()
23 {
24 if (con == null)
25 {
26 con = new SqlConnection(GetSqlConnection());
27 }
28 return con;
29 }
30 /// <summary>
31 /// 返回数据库连接字符串
32 /// </summary>
33 /// <returns></returns>
34 public static String GetSqlConnection()
35 {
36 // 连接字符串
37 String strConn = "";
38 return strConn;
39 }
40 #endregion
41
42 #region 数据库连接和关闭
43 /// <summary>
44 /// 打开连接池
45 /// </summary>
46 private static void Open()
47 {
48 // 打开连接池
49 if (con == null)
50 {
51 con = new SqlConnection(GetSqlConnection());
52 con.Open();
53 }
54 else if(con.State!=ConnectionState.Open)
55 {
56 con.Open();
57 }
58 }
59 /// <summary>
60 /// 关闭连接池
61 /// </summary>
62 private static void Close()
63 {
64 // 关闭之前要判断
65 if (con != null)
66 {
67 if (con.State != ConnectionState.Closed)
68 {
69 con.Close();
70 }
71 }
72 }
73 /// <summary>
74 /// 释放连接池
75 /// </summary>
76 private static void Dispose()
77 {
78 // 确定连接已关闭
79 if (con != null)
80 {
81 con.Dispose();
82 con = null;
83 }
84 }
85 #endregion
86
87 #endregion
88
89 #region 执行sql字符串
90
91 #region 执行不带参数的SQL语句
92 /// <summary>
93 /// 执行不带参数的SQL语句。返回影响行数
94 /// </summary>
95 /// <param name="Sqlstr"></param>
96 /// <returns></returns>
97 public static int ExecuteSql(String Sqlstr)
98 {
99 // 创建返回值
100 int re = -1;
101 // 创建SqlCommand
102 SqlCommand cmd = new SqlCommand();
103 try
104 {
105 // 执行
106 cmd.Connection = GetCon();
107 cmd.CommandText = Sqlstr;
108 // 打开连接
109 Open();
110 // 获得影响行数
111 re = cmd.ExecuteNonQuery();
112 }
113 catch (Exception e)
114 {
115 // 异常抛出
116 throw e;
117 }
118 finally
119 {
120 // 销毁SqlCommand
121 cmd.Dispose();
122 // 关闭连接
123 Close();
124 // 销毁连接
125 Dispose();
126 }
127 return re;
128 }
129 #endregion
130
131 #region 执行带参数的SQL语句
132 /// <summary>
133 /// 执行带参数的SQL语句,返回影响行数
134 /// </summary>
135 /// <param name="Sqlstr">SQL语句</param>
136 /// <param name="param">参数对象数组</param>
137 /// <returns></returns>
138 public static int ExecuteSql(String Sqlstr, SqlParameter[] Params)
139 {
140 // 创建返回值
141 int re = -1;
142 // 创建SqlCommand
143 SqlCommand cmd = new SqlCommand();
144 try
145 {
146 // 执行
147 cmd.Connection = GetCon(); ;
148 cmd.CommandText = Sqlstr;
149 cmd.Parameters.AddRange(Params);
150 Open();
151 // 获取影响行数
152 re = cmd.ExecuteNonQuery();
153 }
154 catch (Exception e)
155 {
156 // 异常抛出
157 throw e;
158 }
159 finally
160 {
161 // 销毁
162 cmd.Dispose();
163 Close();
164 Dispose();
165 }
166 return re;
167 }
168 #endregion
169
170 #region 执行SQL语句并返回数据表(无参数)
171 /// <summary>
172 /// 执行SQL语句并返回数据表(无参数)
173 /// </summary>
174 /// <param name="Sqlstr">SQL语句</param>
175 /// <returns></returns>
176 public static DataSet ExecuteDt(String Sqlstr)
177 {
178 // 初始化返回值
179 DataSet dt = new DataSet();
180 try
181 {
182 // 执行
183 SqlDataAdapter da = new SqlDataAdapter(Sqlstr, GetCon());
184 // 打开
185 Open();
186 // 填充表格
187 da.Fill(dt);
188 // 销毁变量
189 da.Dispose();
190 }
191 catch (Exception e)
192 {
193 // 抛出异常
194 throw e;
195 }
196 finally
197 {
198 // 销毁
199 Close();
200 Dispose();
201 }
202 return dt;
203 }
204
205 #endregion
206
207 #region 执行SQL语句并返回数据表(有参数)
208 /// <summary>
209 /// 执行SQL语句并返回数据表(有参数)
210 /// </summary>
211 /// <param name="Sqlstr">SQL语句</param>
212 /// <returns></returns>
213 public static DataSet ExecuteDt(String Sqlstr, SqlParameter[] Params)
214 {
215 // 太累了,不注释了
216 DataSet dt = new DataSet();
217 SqlCommand cmd = new SqlCommand();
218 try
219 {
220 cmd.Connection = GetCon();
221 cmd.CommandText = Sqlstr;
222 cmd.Parameters.AddRange(Params);
223 SqlDataAdapter da = new SqlDataAdapter(cmd);
224 Open();
225 da.Fill(dt);
226 da.Dispose();
227 }
228 catch (Exception e)
229 {
230 throw e;
231 }
232 finally
233 {
234 cmd.Dispose();
235 Close();
236 Dispose();
237 }
238 return dt;
239 }
240 #endregion
241
242 #region 返回DataReader
243 /// <summary>
244 /// 返回DataReader
245 /// </summary>
246 /// <param name="Sqlstr"></param>
247 /// <returns></returns>
248 public static SqlDataReader ExecuteReader(String Sqlstr)
249 {
250 // 初始化返回值
251 SqlDataReader sdr = null;
252 // 创建SqlCommand
253 SqlCommand cmd = new SqlCommand();
254 try
255 {
256 // 执行
257 cmd.Connection = GetCon();
258 cmd.CommandText = Sqlstr;
259 Open();
260 sdr = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
261 }
262 catch (Exception e)
263 {
264 // 抛出异常
265 throw e;
266 }
267 finally
268 {
269 // 销毁
270 cmd.Dispose();
271 Close();
272 Dispose();
273 }
274 // 返回
275 return sdr;
276 }
277 #endregion
278
279 #endregion
280
281 }
282 }


这里也有一个问题。183行的变量(我不知道叫什么)这个变量,有可能不会被销毁。而且260行的代码,不知道什么意思,看别人都这么写,我也就这么写了。。。。。。。