#region 引用对象
using System;
using System.Xml ;
using System.Data;
using System.Data.SqlClient;
using System.Web;
#endregion
namespace SysClassLibrary
{
///
1<summary>
2/// DataAccess 的摘要说明。
3/// <author>wuchen</author>
4/// <date>2004-4-12</date>
5/// <email>[email protected]</email>
6/// <description>数据处理基类,调用方式:DataAccess.DataSet((string)sqlstr);或者DataAccess.DataSet((string)sqlstr,ref DataSet ds); </description>
7/// </summary>
public class DataAccess
{
#region 属性
///
1<summary>
2/// 是否必须关闭数据库连接
3/// </summary>
public static bool mustCloseConnection
{
get
{
return _mustCloseConnection;
}
set
{
_mustCloseConnection=value;
}
}
///
1<summary>
2/// 连接字符串
3/// </summary>
public static string connectionString
{
get
{
if(_connectionString ==string.Empty)
return SysConfig.ConnectionString ;
else
return _connectionString;
}
set
{
_connectionString =value;
}
}
///
1<summary>
2/// 是否关闭数据库连接
3/// </summary>
private static bool _mustCloseConnection = true;
private static string _connectionString =string.Empty ;
#endregion
#region 类构造函数
///
1<summary>
2/// 构造函数
3/// </summary>
public DataAccess()
{
}
///
1<summary>
2/// 析构函数,释放相应的对象
3/// </summary>
~DataAccess()
{
}
#endregion
#region Method
///
1<summary>
2/// 执行Sql查询语句
3/// </summary>
///
1<param name="sqlstr"/>
传入的Sql语句
///
1<returns>i </returns>
public static int ExecuteSql(string sqlstr){
int i=0;
using (SqlConnection conn =new SqlConnection(connectionString))
{
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.Text ;
comm.CommandText =sqlstr;
try
{
conn.Open();
i=comm.ExecuteNonQuery();
}
catch(SqlException e)
{
new ErrorLog().SaveDataAccessError(e);
}
finally
{
conn.Close();
comm.Dispose();
}
}
return i;
}
///
1<summary>
2/// 执行存储过程
3/// </summary>
///
1<param name="procName"/>
存储过程名
///
1<param name="coll"/>
SqlParameters 集合
public static void ExecutePorcedure(string procName,SqlParameter[] coll)
{
using (SqlConnection conn =new SqlConnection(connectionString))
{
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.StoredProcedure ;
ExecutePorcedure(procName,coll,conn,comm);
}
}
public static void ExecutePorcedure(string procName,SqlParameter[] coll,ref DataSet ds)
{
using (SqlConnection conn =new SqlConnection(connectionString))
{
SqlCommand comm=new SqlCommand();
comm.Connection =conn;
comm.CommandType =CommandType.StoredProcedure ;
ExecutePorcedure(procName,coll,conn,comm,ref ds);
}
}
///
1<summary>
2/// 执行存储过程类
3/// </summary>
///
1<param name="procName"/>
///
1<param name="coll"/>
///
1<param name="conn"/>
///
1<param name="comm"/>
public static void ExecutePorcedure(string procName,SqlParameter[] coll,SqlConnection conn,SqlCommand comm)
{
if(procName ==null || procName=="")
throw new SqlNullException();
try
{
conn.Open();
for(int i=0;i
1<coll.length;i++) )="" .add(coll[i]);="" ;="" <summary="" catch(sqlexception="" coll,sqlconnection="" comm,ref="" comm.commandtext="procName;" comm.commandtype="CommandType.StoredProcedure" comm.dispose();="" comm.executenonquery();="" comm.parameters="" comm.parameters.clear();="" conn,sqlcommand="" conn.close();="" conn.open();="" da="new" da.fill(ds);="" da.selectcommand="comm;" dataset="" ds)="" e)="" errorlog().savedataaccesserror(e);="" executeporcedure(string="" finally="" for(int="" i="0;i<coll.Length;i++)" if(procname="null" new="" procname="" procname,sqlparameter[]="" public="" sqldataadapter="" sqldataadapter();="" sqlnullexception();="" static="" throw="" try="" void="" {="" ||="" }="">
2/// 执行Sql查询语句并返回第一行的第一条记录,返回值为object 使用时需要拆箱操作 -> Unbox
3///
4/// <param name="sqlstr"/>传入的Sql语句
5/// <returns>object 返回值 </returns>
6public static object ExecuteScalar(string sqlstr)
7{
8if(sqlstr ==null || sqlstr =="")
9throw new SqlNullException();
10
11object obj=new object();
12using (SqlConnection conn =new SqlConnection(connectionString))
13{
14SqlCommand comm=new SqlCommand();
15comm.Connection =conn;
16comm.CommandType =CommandType.Text;
17try
18{
19conn.Open();
20comm.CommandText =sqlstr;
21obj=comm.ExecuteScalar();
22}
23catch(SqlException e)
24{
25new ErrorLog().SaveDataAccessError(e);
26}
27finally
28{
29conn.Close();
30comm.Dispose();
31}
32}
33return obj;
34}
35
36/// <summary>
37/// 执行Sql查询语句,同时进行事务处理
38/// </summary>
39/// <param name="sqlstr"/>传入的Sql语句
40public static void ExecuteSqlWithTransaction(string sqlstr)
41{
42if(sqlstr ==null || sqlstr =="")
43throw new SqlNullException();
44
45using(SqlConnection conn=new SqlConnection(connectionString))
46{
47//可以在事务中创建一个保存点,同时回滚到保存点
48SqlTransaction trans ;
49trans=conn.BeginTransaction();
50SqlCommand comm=new SqlCommand();
51comm.Connection =conn;
52comm.Transaction =trans;
53try
54{
55conn.Open();
56comm.CommandType =CommandType.Text ;
57comm.CommandText =sqlstr;
58comm.ExecuteNonQuery();
59trans.Commit();
60}
61catch
62{
63trans.Rollback();
64}
65finally
66{
67trans.Dispose();
68
69conn.Close();
70comm.Dispose();
71}
72}
73}
74
75/// <summary>
76/// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
77/// 方法关闭数据库连接
78/// </summary>
79/// <param name="sqlstr"/>传入的Sql语句
80/// <returns>SqlDataReader对象</returns>
81public static SqlDataReader dataReader(string sqlstr)
82{
83SqlDataReader _dataReader =null ;
84dataReader(sqlstr,ref _dataReader);
85return _dataReader;
86}
87
88/// <summary>
89/// 返回指定Sql语句的SqlDataReader,请注意,在使用后请关闭本对象,同时将自动调用closeConnection()来关闭数据库连接
90/// 方法关闭数据库连接
91/// </summary>
92/// <param name="sqlstr"/>传入的Sql语句
93/// <param name="dr"/>传入的ref DataReader 对象
94public static void dataReader(string sqlstr,ref SqlDataReader _dataReader)
95{
96if(sqlstr ==null || sqlstr =="")
97throw new SqlNullException();
98try
99{
100SqlConnection conn=new SqlConnection(connectionString);
101SqlCommand comm=new SqlCommand();
102comm.Connection =conn;
103comm.CommandText =sqlstr;
104comm.CommandType =CommandType.Text ;
105conn.Open();
106if(_mustCloseConnection)
107{
108_dataReader=comm.ExecuteReader(CommandBehavior.CloseConnection);
109}
110else
111{
112_dataReader= comm.ExecuteReader();
113}
114}
115catch(SqlException e)
116{
117_dataReader =null;
118//输出错误原因
119throw e;
120}
121}
122
123
124/// <summary>
125/// 返回指定Sql语句的DataSet
126/// </summary>
127/// <param name="sqlstr"/>传入的Sql语句
128/// <returns>DataSet</returns>
129public static DataSet dataSet(string sqlstr)
130{
131if(sqlstr ==null || sqlstr =="")
132throw new SqlNullException();
133DataSet ds= new DataSet();
134SqlDataAdapter da=new SqlDataAdapter();
135using (SqlConnection conn=new SqlConnection(connectionString))
136{
137SqlCommand comm=new SqlCommand();
138comm.Connection =conn;
139try
140{
141conn.Open();
142comm.CommandType =CommandType.Text ;
143comm.CommandText =sqlstr;
144da.SelectCommand =comm;
145da.Fill(ds);
146}
147catch(SqlException e)
148{
149new ErrorLog().SaveDataAccessError(e);
150}
151finally
152{
153conn.Close();
154}
155}
156return ds;
157}
158
159/// <summary>
160/// 返回指定Sql语句的DataSet
161/// </summary>
162/// <param name="sqlstr"/>传入的Sql语句
163/// <param name="ds"/>传入的引用DataSet对象
164public static void dataSet(string sqlstr,ref DataSet ds)
165{
166if(sqlstr ==null || sqlstr =="")
167throw new SqlNullException();
168using (SqlConnection conn=new SqlConnection(connectionString))
169{
170SqlDataAdapter da=new SqlDataAdapter();
171SqlCommand comm=new SqlCommand();
172comm.Connection =conn;
173try
174{
175conn.Open();
176comm.CommandType =CommandType.Text ;
177comm.CommandText =sqlstr;
178da.SelectCommand =comm;
179da.Fill(ds);
180}
181catch(SqlException e)
182{
183new ErrorLog().SaveDataAccessError(e);
184}
185finally
186{
187conn.Close();
188}
189}
190}
191/// <summary>
192/// 返回指定Sql语句的DataTable
193/// </summary>
194/// <param name="sqlstr"/>传入的Sql语句
195/// <returns>DataTable</returns>
196public static DataTable dataTable(string sqlstr)
197{
198if(sqlstr ==null || sqlstr =="")
199throw new SqlNullException();
200SqlDataAdapter da=new SqlDataAdapter();
201DataTable datatable=new DataTable();
202using (SqlConnection conn=new SqlConnection(connectionString))
203{
204SqlCommand comm=new SqlCommand();
205comm.Connection =conn;
206try
207{
208conn.Open();
209comm.CommandType =CommandType.Text ;
210comm.CommandText =sqlstr;
211da.SelectCommand =comm;
212da.Fill(datatable);
213}
214catch(SqlException e)
215{
216new ErrorLog().SaveDataAccessError(e);
217}
218finally
219{
220conn.Close();
221}
222}
223
224return datatable;
225}
226
227/// <summary>
228/// 执行指定Sql语句,同时给传入DataTable进行赋值
229/// </summary>
230/// <param name="sqlstr"/>传入的Sql语句
231/// <param name="dt"/>ref DataTable dt
232public static void dataTable(string sqlstr,ref DataTable dt)
233{
234if(sqlstr ==null || sqlstr =="")
235throw new SqlNullException();
236if(dt ==null)
237dt=new DataTable();
238SqlDataAdapter da=new SqlDataAdapter();
239using (SqlConnection conn=new SqlConnection(connectionString))
240{
241SqlCommand comm=new SqlCommand();
242comm.Connection =conn;
243try
244{
245conn.Open();
246comm.CommandType =CommandType.Text ;
247comm.CommandText =sqlstr;
248da.SelectCommand =comm;
249da.Fill(dt);
250}
251catch(SqlException e)
252{
253new ErrorLog().SaveDataAccessError(e);
254}
255finally
256{
257conn.Close();
258}
259}
260}
261/// <summary>
262/// 执行带参数存储过程并返回数据集合
263/// </summary>
264/// <param name="procName"/>存储过程名称
265/// <param name="parameters"/>SqlParameterCollection 输入参数
266/// <returns></returns>
267public static DataTable dataTable(string procName,SqlParameterCollection parameters)
268{
269if(procName ==null || procName =="")
270throw new SqlNullException();
271SqlDataAdapter da=new SqlDataAdapter();
272DataTable datatable=new DataTable();
273using (SqlConnection conn=new SqlConnection(connectionString))
274{
275SqlCommand comm=new SqlCommand();
276comm.Connection =conn;
277try
278{
279comm.Parameters.Clear();
280comm.CommandType=CommandType.StoredProcedure ;
281comm.CommandText =procName;
282foreach(SqlParameter para in parameters)
283{
284SqlParameter p=(SqlParameter)para;
285comm.Parameters.Add(p);
286}
287conn.Open();
288
289da.SelectCommand =comm;
290da.Fill(datatable);
291}
292catch(SqlException e)
293{
294new ErrorLog().SaveDataAccessError(e);
295}
296finally
297{
298conn.Close();
299}
300}
301
302return datatable;
303}
304/// <summary>
305/// DataView
306/// </summary>
307/// <param name="sqlstr"/>
308/// <returns></returns>
309public static DataView dataView(string sqlstr)
310{
311if(sqlstr ==null || sqlstr =="")
312throw new SqlNullException();
313SqlDataAdapter da=new SqlDataAdapter();
314DataView dv=new DataView();
315DataSet ds=new DataSet();
316dataSet(sqlstr,ref ds);
317dv=ds.Tables[0].DefaultView;
318return dv;
319}
320
321#endregion
322}
323
324#region 异常类,记录出错信息
325/// <summary>
326/// 异常类
327/// </summary>
328public class SqlNullException:ApplicationException
329{
330/// <summary>
331/// 构造函数
332/// </summary>
333public SqlNullException(){
334new SqlNullException("DataAccess类中静态成员 参数不能为空。可能是sqlstr =null");
335}
336
337/// <summary>
338/// 重载出错信息
339/// </summary>
340/// <param name="message"/>
341public SqlNullException(string message)
342{
343//保存出错信息
344try
345{
346//err.SaveDataAccessError(message);
347HttpContext.Current.Response.Write(message);
348}
349catch
350{
351throw;
352}
353}
354/// <summary>
355/// 重载出错信息
356/// </summary>
357/// <param name="e"/>
358public SqlNullException(SqlException e)
359{
360//保存出错信息
361try
362{
363HttpContext.Current.Response.Write(e.Message);
364//err.SaveDataAccessError(e);
365}
366catch
367{
368throw;
369}
370}
371
372/// <summary>
373/// 析构函数
374/// </summary>
375~ SqlNullException()
376{
377
378}
379private ErrorLog err=new ErrorLog();
380}
381#endregion
382
383#region ErrorLog 错误日志捕获
384/// <summary>
385/// ErrorLog 的摘要说明。
386/// </summary>
387public class ErrorLog
388{
389/// <summary>
390/// ctr
391/// </summary>
392public ErrorLog()
393{
394//
395// TODO: 在此处添加构造函数逻辑
396//
397}
398
399/// <summary>
400/// 数据库访问出错日志
401/// </summary>
402/// <param name="e"/>错误信息
403public void SaveDataAccessError(SqlException e)
404{
405//生成的错误行号
406// int lineNumber = e.LineNumber ;
407// string message= e.Message;
408// int number =e.Number;
409// string procedure=e.Procedure ;
410// string source=e.Source ;
411//
412// string ErrMessage ="LineNumber:"+lineNumber.ToString() + " ---- Procedure:"+ procedure.ToString() ;
413// string ErrSource =source ;
414// string ErrTargetSite ="错误号:"+number ;
415// string Url =HttpContext.Current.Request.UrlReferrer.AbsolutePath ;
416// string IP = HttpContext.Current.Request.UserHostAddress ;
417// try
418// {
419// SysClassLibrary.DataAccess.mustCloseConnection =true;
420// SysClassLibrary.DataAccess.ExecuteSql(string.Format("insert into sys_errorLog(ErrMessage,ErrSource,ErrTargetSite,Url,IP)values('{0}','{1}','{2}','{3}','{4}') ",ErrMessage,ErrSource,ErrTargetSite,Url,IP));
421// }
422// catch
423// {
424// }
425}
426/// <summary>
427/// 数据库访问出错日志
428/// </summary>
429/// <param name="message"/>出错信息
430public void SaveDataAccessError(string message)
431{
432//生成的错误行号
433
434// string ErrMessage =message;
435// string ErrSource ="" ;
436// string ErrTargetSite ="";
437// string Url =HttpContext.Current.Request.UrlReferrer.AbsolutePath ;
438// string IP = HttpContext.Current.Request.UserHostAddress ;
439// try
440// {
441// SysClassLibrary.DataAccess.mustCloseConnection =true;
442// SysClassLibrary.DataAccess.ExecuteSql(string.Format("insert into sys_errorLog(ErrMessage,ErrSource,ErrTargetSite,Url,IP)values('{0}','{1}','{2}','{3}','{4}') ",ErrMessage,ErrSource,ErrTargetSite,Url,IP));
443// }
444// catch
445// {
446// }
447}
448}
449#endregion
450}</coll.length;i++)>