西瓜皮

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
  1 using System;
  2 using System.Collections;
  3 using System.Collections.Generic;
  4 using System.Configuration;
  5 using System.Data;
  6 using System.Data.SqlClient;
  7 using System.Text;
  8 
  9 namespace DAL
 10 {
 11     public class SqlHelper
 12     {
 13         //连接字符串
 14         public static string StrConn = ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
 15 
 16         #region 执行查询,返回DataTable对象-----------------------
 17 
 18         public static DataTable GetTable(string StrSql)
 19         {
 20             return GetTable(StrSql, null);
 21         }
 22         public static DataTable GetTable(string StrSql, SqlParameter[] Parms)
 23         {
 24             return GetTable(StrSql, Parms, CommandType.Text);
 25         }
 26         /// <summary>
 27         /// 执行查询,返回DataTable对象
 28         /// </summary>
 29         /// <param name="StrSql">sql语句</param>
 30         /// <param name="Parms">参数数组</param>
 31         /// <param name="cmdtype">Command类型</param>
 32         /// <returns>DataTable对象</returns>
 33         public static DataTable GetTable(string StrSql, SqlParameter[] Parms, CommandType cmdtype)
 34         {
 35             DataTable dt = new DataTable(); ;
 36             using (SqlConnection conn = new SqlConnection(StrConn))
 37             {
 38                 SqlDataAdapter da = new SqlDataAdapter(StrSql, conn);
 39                 da.SelectCommand.CommandType = cmdtype;
 40                 if (Parms != null)
 41                 {
 42                     da.SelectCommand.Parameters.AddRange(Parms);
 43                 }
 44                 da.Fill(dt);
 45             }
 46             return dt;
 47         }
 48 
 49         #endregion
 50 
 51         #region 执行查询,返回DataSet对象-------------------------
 52 
 53         public static DataSet GetDataSet(string StrSql)
 54         {
 55             return GetDataSet(StrSql, null);
 56         }
 57 
 58         public static DataSet GetDataSet(string StrSql, SqlParameter[] Parms)
 59         {
 60             return GetDataSet(StrSql, Parms, CommandType.Text);
 61         }
 62         /// <summary>
 63         /// 执行查询,返回DataSet对象
 64         /// </summary>
 65         /// <param name="StrSql">sql语句</param>
 66         /// <param name="Parms">参数数组</param>
 67         /// <param name="cmdtype">Command类型</param>
 68         /// <returns>DataSet对象</returns>
 69         public static DataSet GetDataSet(string StrSql, SqlParameter[] Parms, CommandType cmdtype)
 70         {
 71             DataSet dt = new DataSet(); ;
 72             using (SqlConnection conn = new SqlConnection(StrConn))
 73             {
 74                 SqlDataAdapter da = new SqlDataAdapter(StrSql, conn);
 75                 da.SelectCommand.CommandType = cmdtype;
 76                 if (Parms != null)
 77                 {
 78                     da.SelectCommand.Parameters.AddRange(Parms);
 79                 }
 80                 da.Fill(dt);
 81             }
 82             return dt;
 83         }
 84 
 85         #endregion
 86 
 87         #region 执行非查询存储过程和SQL语句-----------------------------
 88 
 89         public static int ExcuteProc(string ProcName)
 90         {
 91             return ExcuteSQL(ProcName, null, CommandType.StoredProcedure);
 92         }
 93 
 94         public static int ExcuteProc(string ProcName, SqlParameter[] Parms)
 95         {
 96             return ExcuteSQL(ProcName, Parms, CommandType.StoredProcedure);
 97         }
 98 
 99         public static int ExcuteSQL(string StrSql)
100         {
101             return ExcuteSQL(StrSql, null);
102         }
103 
104         public static int ExcuteSQL(string StrSql, SqlParameter[] Parms)
105         {
106             return ExcuteSQL(StrSql, Parms, CommandType.Text);
107         }
108 
109         /// 执行非查询存储过程和SQL语句
110         /// 增、删、改
111         /// </summary>
112         /// <param name="StrSql">要执行的SQL语句</param>
113         /// <param name="paras">参数列表,没有参数填入null</param>
114         /// <param name="cmdType">Command类型</param>
115         /// <returns>返回影响行数</returns>
116         public static int ExcuteSQL(string StrSql, SqlParameter[] Parms, CommandType cmdType)
117         {
118             int i = 0;
119             using (SqlConnection conn = new SqlConnection(StrConn))
120             {
121                 SqlCommand cmd = new SqlCommand(StrSql, conn);
122                 cmd.CommandType = cmdType;
123                 if (Parms != null)
124                 {
125                     cmd.Parameters.AddRange(Parms);
126                 }
127                 conn.Open();
128                 i = cmd.ExecuteNonQuery();
129                 conn.Close();
130             }
131             return i;
132 
133         }
134 
135         #endregion
136 
137         #region 查询获取单个值------------------------------------
138 
139         /// <summary>
140         /// 调用不带参数的存储过程获取单个值
141         /// </summary>
142         /// <param name="ProcName"></param>
143         /// <returns></returns>
144         public static object GetObjectByProc(string ProcName)
145         {
146             return GetObjectByProc(ProcName, null);
147         }
148         /// <summary>
149         /// 调用带参数的存储过程获取单个值
150         /// </summary>
151         /// <param name="ProcName"></param>
152         /// <param name="paras"></param>
153         /// <returns></returns>
154         public static object GetObjectByProc(string ProcName, SqlParameter[] Parms)
155         {
156             return GetObject(ProcName, Parms, CommandType.StoredProcedure);
157         }
158         /// <summary>
159         /// 根据sql语句获取单个值
160         /// </summary>
161         /// <param name="StrSql"></param>
162         /// <returns></returns>
163         public static object GetObject(string StrSql)
164         {
165             return GetObject(StrSql, null);
166         }
167         /// <summary>
168         /// 根据sql语句 和 参数数组获取单个值
169         /// </summary>
170         /// <param name="StrSql"></param>
171         /// <param name="paras"></param>
172         /// <returns></returns>
173         public static object GetObject(string StrSql, SqlParameter[] Parms)
174         {
175             return GetObject(StrSql, Parms, CommandType.Text);
176         }
177 
178         /// <summary>
179         /// 执行SQL语句,返回首行首列
180         /// </summary>
181         /// <param name="StrSql">要执行的SQL语句</param>
182         /// <param name="paras">参数列表,没有参数填入null</param>
183         /// <returns>返回的首行首列</returns>
184         public static object GetObject(string StrSql, SqlParameter[] Parms, CommandType cmdtype)
185         {
186             object o = null;
187             using (SqlConnection conn = new SqlConnection(StrConn))
188             {
189                 SqlCommand cmd = new SqlCommand(StrSql, conn);
190                 cmd.CommandType = cmdtype;
191                 if (Parms != null)
192                 {
193                     cmd.Parameters.AddRange(Parms);
194                 }
195 
196                 conn.Open();
197                 o = cmd.ExecuteScalar();
198                 conn.Close();
199             }
200             return o;
201 
202         }
203 
204         #endregion
205 
206         #region 查询获取DataReader------------------------------------
207 
208         /// <summary>
209         /// 调用不带参数的存储过程,返回DataReader对象
210         /// </summary>
211         /// <param name="procName">存储过程名称</param>
212         /// <returns>DataReader对象</returns>
213         public static SqlDataReader GetReaderByProc(string procName)
214         {
215             return GetReaderByProc(procName, null);
216         }
217         /// <summary>
218         /// 调用带有参数的存储过程,返回DataReader对象
219         /// </summary>
220         /// <param name="procName">存储过程名</param>
221         /// <param name="paras">参数数组</param>
222         /// <returns>DataReader对象</returns>
223         public static SqlDataReader GetReaderByProc(string procName, SqlParameter[] Parms)
224         {
225             return GetReader(procName, Parms, CommandType.StoredProcedure);
226         }
227         /// <summary>
228         /// 根据sql语句返回DataReader对象
229         /// </summary>
230         /// <param name="StrSql">sql语句</param>
231         /// <returns>DataReader对象</returns>
232         public static SqlDataReader GetReader(string StrSql)
233         {
234             return GetReader(StrSql, null);
235         }
236         /// <summary>
237         /// 根据sql语句和参数返回DataReader对象
238         /// </summary>
239         /// <param name="StrSql">sql语句</param>
240         /// <param name="paras">参数数组</param>
241         /// <returns>DataReader对象</returns>
242         public static SqlDataReader GetReader(string StrSql, SqlParameter[] Parms)
243         {
244             return GetReader(StrSql, Parms, CommandType.Text);
245         }
246         /// <summary>
247         /// 查询SQL语句获取DataReader
248         /// </summary>
249         /// <param name="StrSql">查询的SQL语句</param>
250         /// <param name="paras">参数列表,没有参数填入null</param>
251         /// <returns>查询到的DataReader(关闭该对象的时候,自动关闭连接)</returns>
252         public static SqlDataReader GetReader(string StrSql, SqlParameter[] Parms, CommandType cmdtype)
253         {
254             SqlDataReader sqldr = null;
255             SqlConnection conn = new SqlConnection(StrConn);
256             SqlCommand cmd = new SqlCommand(StrSql, conn);
257             cmd.CommandType = cmdtype;
258             if (Parms != null)
259             {
260                 cmd.Parameters.AddRange(Parms);
261             }
262             conn.Open();
263             //CommandBehavior.CloseConnection的作用是如果关联的DataReader对象关闭,则连接自动关闭
264             sqldr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
265             return sqldr;
266         }
267 
268         #endregion
269 
270         #region 批量插入数据---------------------------------------------
271 
272         /// <summary>
273         /// 往数据库中批量插入数据
274         /// </summary>
275         /// <param name="sourceDt">数据源表</param>
276         /// <param name="targetTable">服务器上目标表</param>
277         public static void BulkToDB(DataTable sourceDt, string targetTable)
278         {
279             SqlConnection conn = new SqlConnection(StrConn);
280             SqlBulkCopy bulkCopy = new SqlBulkCopy(conn);   //用其它源的数据有效批量加载sql server表中
281             bulkCopy.DestinationTableName = targetTable;    //服务器上目标表的名称
282             bulkCopy.BatchSize = sourceDt.Rows.Count;   //每一批次中的行数
283             try
284             {
285                 conn.Open();
286                 if (sourceDt != null && sourceDt.Rows.Count != 0)
287                     bulkCopy.WriteToServer(sourceDt);   //将提供的数据源中的所有行复制到目标表中
288             }
289             catch (Exception ex)
290             {
291                 throw ex;
292             }
293             finally
294             {
295                 conn.Close();
296                 if (bulkCopy != null)
297                     bulkCopy.Close();
298             }
299         }
300 
301         #endregion
302 
303         #region 执行数据库事务操作
304         /// <summary>
305         /// 执行多条SQL语句,实现数据库事务。
306         /// </summary>
307         /// <param name="SQLStringList">多条SQL语句</param>        
308         public static int ExecuteSqlTran(List<String> SQLStringList)
309         {
310             using (SqlConnection conn = new SqlConnection(StrConn))
311             {
312                 conn.Open();
313                 using (SqlTransaction trans = conn.BeginTransaction()) //启动事务
314                 {
315                     SqlCommand cmd = new SqlCommand();
316                     cmd.Connection = conn;
317                     cmd.Transaction = trans;
318                     try
319                     {
320                         int count = 0;
321                         for (int n = 0; n < SQLStringList.Count; n++)
322                         {
323                             string strsql = SQLStringList[n];
324                             cmd.CommandText = strsql;
325                             count += cmd.ExecuteNonQuery();
326                         }
327                         trans.Commit();
328                         return count;
329                     }
330                     catch
331                     {
332                         trans.Rollback();
333                         return 0;
334                     }
335                 }
336             }
337         }
338 
339         /// <summary>
340         /// 执行带参数的多条SQL语句,实现数据库事务。
341         /// </summary>
342         /// <param name="SQLStringList">SQL语句的哈希表(key为sql语句,value是该语句的SqlParameter[])</param>
343         public static int ExecuteSqlTran(Hashtable SQLStringList)
344         {
345             using (SqlConnection conn = new SqlConnection(StrConn))
346             {
347                 conn.Open();
348                 using (SqlTransaction trans = conn.BeginTransaction()) //启动事务
349                 {
350                     SqlCommand cmd = new SqlCommand();
351                     cmd.Connection = conn;
352                     cmd.Transaction = trans;
353                     try
354                     {
355                         //循环
356                         int count = 0;
357                         foreach (DictionaryEntry myDE in SQLStringList)
358                         {
359                             SqlParameter[] cmdParms = (SqlParameter[])myDE.Value;
360                             if (cmdParms != null)
361                             {
362                                 cmd.Parameters.AddRange(cmdParms);
363                             }
364                             cmd.CommandText = myDE.Key.ToString();
365                             count += cmd.ExecuteNonQuery();
366                             cmd.Parameters.Clear();
367                         }
368                         trans.Commit();
369                         return count;
370                     }
371                     catch
372                     {
373                         trans.Rollback();
374                         return 0;
375                     }
376                     finally
377                     {
378                         conn.Close();
379                     }
380                 }
381             }
382         }
383         #endregion
384 
385         #region 生成分页sql语句
386         /// <summary>
387         /// 生成分页sql语句
388         /// </summary>
389         /// <param name="sql">sql查询语句</param>
390         /// <param name="page">当前页</param>
391         /// <param name="rows">每页记录数</param>
392         /// <returns>生成分页sql语句</returns>
393         public static string GetPageSql(string StrSql, int page, int rows)
394         {
395             StringBuilder sb = new StringBuilder();
396             sb.Append("select * from ( ");
397             sb.Append(" select row_number()over(order by tempColumn)tempRowNumber,*");
398             sb.Append(" from (" + StrSql + ")t");
399             sb.Append(")tt");
400             sb.Append(" where tempRowNumber>" + ((page * rows) - rows).ToString());
401             return sb.ToString();
402         }
403         #endregion
404 
405     }
406 }

 

posted on 2013-05-25 00:44  西瓜皮  阅读(465)  评论(0)    收藏  举报