公共的数据库访问访问类 SqlHelper.cs

  1. /// <summary>
  2. /// 类说明:公共的数据库访问访问类
  3. /// </summary>
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Text;
  7. using System.Data;
  8. using System.Data.SqlClient;
  9. using System.Collections;
  10. namespace DotNet.Utilities
  11. {
  12. /// <summary>
  13. /// 数据库的通用访问代码
  14. /// 此类为抽象类,
  15. /// 不允许实例化,在应用时直接调用即可
  16. /// </summary>
  17. public abstract class SqlHelper
  18. {
  19. /// <summary>
  20. /// 数据库连接字符串
  21. /// </summary>
  22. public static readonly string connectionString = System.Configuration.ConfigurationSettings.AppSettings["con"].ToString().Trim();
  23. // Hashtable to store cached parameters
  24. private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable());
  25. #region //ExecteNonQuery方法
  26. /// <summary>
  27. ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
  28. /// 使用参数数组形式提供参数列表
  29. /// </summary>
  30. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  31. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  32. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  33. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  34. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  35. public static int ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  36. {
  37. SqlCommand cmd = new SqlCommand();
  38. using (SqlConnection conn = new SqlConnection(connectionString))
  39. {
  40. //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中
  41. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  42. int val = cmd.ExecuteNonQuery();
  43. //清空SqlCommand中的参数列表
  44. cmd.Parameters.Clear();
  45. return val;
  46. }
  47. }
  48. /// <summary>
  49. ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。
  50. /// 使用参数数组形式提供参数列表
  51. /// </summary>
  52. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  53. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  54. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  55. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  56. public static int ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  57. {
  58. return ExecteNonQuery(connectionString, cmdType, cmdText, commandParameters);
  59. }
  60. /// <summary>
  61. ///存储过程专用
  62. /// </summary>
  63. /// <param name="cmdText">存储过程的名字</param>
  64. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  65. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  66. public static int ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters)
  67. {
  68. return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters);
  69. }
  70. /// <summary>
  71. ///Sql语句专用
  72. /// </summary>
  73. /// <param name="cmdText">T_Sql语句</param>
  74. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  75. /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns>
  76. public static int ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters)
  77. {
  78. return ExecteNonQuery(CommandType.Text, cmdText, commandParameters);
  79. }
  80. #endregion
  81. #region//GetTable方法
  82. /// <summary>
  83. /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
  84. /// 使用参数数组提供参数
  85. /// </summary>
  86. /// <param name="connecttionString">一个现有的数据库连接</param>
  87. /// <param name="cmdTye">SqlCommand命令类型</param>
  88. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  89. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  90. /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
  91. public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
  92. {
  93. SqlCommand cmd = new SqlCommand();
  94. DataSet ds = new DataSet();
  95. using (SqlConnection conn = new SqlConnection(connecttionString))
  96. {
  97. PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters);
  98. SqlDataAdapter adapter = new SqlDataAdapter();
  99. adapter.SelectCommand = cmd;
  100. adapter.Fill(ds);
  101. }
  102. DataTableCollection table = ds.Tables;
  103. return table;
  104. }
  105. /// <summary>
  106. /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接
  107. /// 使用参数数组提供参数
  108. /// </summary>
  109. /// <param name="cmdTye">SqlCommand命令类型</param>
  110. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  111. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  112. /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
  113. public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters)
  114. {
  115. return GetTable(SqlHelper.connectionString, cmdTye, cmdText, commandParameters);
  116. }
  117. /// <summary>
  118. /// 存储过程专用
  119. /// </summary>
  120. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  121. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  122. /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
  123. public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters)
  124. {
  125. return GetTable(CommandType.StoredProcedure, cmdText, commandParameters);
  126. }
  127. /// <summary>
  128. /// Sql语句专用
  129. /// </summary>
  130. /// <param name="cmdText"> T-SQL 语句</param>
  131. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  132. /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns>
  133. public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters)
  134. {
  135. return GetTable(CommandType.Text, cmdText, commandParameters);
  136. }
  137. #endregion
  138. /// <summary>
  139. /// 为执行命令准备参数
  140. /// </summary>
  141. /// <param name="cmd">SqlCommand 命令</param>
  142. /// <param name="conn">已经存在的数据库连接</param>
  143. /// <param name="trans">数据库事物处理</param>
  144. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  145. /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param>
  146. /// <param name="cmdParms">返回带参数的命令</param>
  147. private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
  148. {
  149. //判断数据库连接状态
  150. if (conn.State != ConnectionState.Open)
  151. conn.Open();
  152. cmd.Connection = conn;
  153. cmd.CommandText = cmdText;
  154. //判断是否需要事物处理
  155. if (trans != null)
  156. cmd.Transaction = trans;
  157. cmd.CommandType = cmdType;
  158. if (cmdParms != null)
  159. {
  160. foreach (SqlParameter parm in cmdParms)
  161. cmd.Parameters.Add(parm);
  162. }
  163. }
  164. /// <summary>
  165. /// Execute a SqlCommand that returns a resultset against the database specified in the connection string
  166. /// using the provided parameters.
  167. /// </summary>
  168. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  169. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  170. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  171. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  172. /// <returns>A SqlDataReader containing the results</returns>
  173. public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  174. {
  175. SqlCommand cmd = new SqlCommand();
  176. SqlConnection conn = new SqlConnection(connectionString);
  177. // we use a try/catch here because if the method throws an exception we want to
  178. // close the connection throw code, because no datareader will exist, hence the
  179. // commandBehaviour.CloseConnection will not work
  180. try
  181. {
  182. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  183. SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
  184. cmd.Parameters.Clear();
  185. return rdr;
  186. }
  187. catch
  188. {
  189. conn.Close();
  190. throw;
  191. }
  192. }
  193. #region//ExecuteDataSet方法
  194. /// <summary>
  195. /// return a dataset
  196. /// </summary>
  197. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  198. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  199. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  200. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  201. /// <returns>return a dataset</returns>
  202. public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  203. {
  204. SqlCommand cmd = new SqlCommand();
  205. try
  206. {
  207. using (SqlConnection conn = new SqlConnection(connectionString))
  208. {
  209. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  210. SqlDataAdapter da = new SqlDataAdapter();
  211. DataSet ds = new DataSet();
  212. da.SelectCommand = cmd;
  213. da.Fill(ds);
  214. return ds;
  215. }
  216. }
  217. catch
  218. {
  219. throw;
  220. }
  221. }
  222. /// <summary>
  223. /// 返回一个DataSet
  224. /// </summary>
  225. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  226. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  227. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  228. /// <returns>return a dataset</returns>
  229. public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  230. {
  231. return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters);
  232. }
  233. /// <summary>
  234. /// 返回一个DataSet
  235. /// </summary>
  236. /// <param name="cmdText">存储过程的名字</param>
  237. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  238. /// <returns>return a dataset</returns>
  239. public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters)
  240. {
  241. return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
  242. }
  243. /// <summary>
  244. /// 返回一个DataSet
  245. /// </summary>
  246. /// <param name="cmdText">T-SQL 语句</param>
  247. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  248. /// <returns>return a dataset</returns>
  249. public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters)
  250. {
  251. return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters);
  252. }
  253. public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  254. {
  255. SqlCommand cmd = new SqlCommand();
  256. try
  257. {
  258. using (SqlConnection conn = new SqlConnection(connectionString))
  259. {
  260. PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters);
  261. SqlDataAdapter da = new SqlDataAdapter();
  262. DataSet ds = new DataSet();
  263. da.SelectCommand = cmd;
  264. da.Fill(ds);
  265. DataView dv = ds.Tables[0].DefaultView;
  266. dv.Sort = sortExpression + " " + direction;
  267. return dv;
  268. }
  269. }
  270. catch
  271. {
  272. throw;
  273. }
  274. }
  275. #endregion
  276. #region // ExecuteScalar方法
  277. /// <summary>
  278. /// 返回第一行的第一列
  279. /// </summary>
  280. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  281. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  282. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  283. /// <returns>返回一个对象</returns>
  284. public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  285. {
  286. return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters);
  287. }
  288. /// <summary>
  289. /// 返回第一行的第一列存储过程专用
  290. /// </summary>
  291. /// <param name="cmdText">存储过程的名字</param>
  292. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  293. /// <returns>返回一个对象</returns>
  294. public static object ExecuteScalarProducts(string cmdText, params SqlParameter[] commandParameters)
  295. {
  296. return ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters);
  297. }
  298. /// <summary>
  299. /// 返回第一行的第一列Sql语句专用
  300. /// </summary>
  301. /// <param name="cmdText">者 T-SQL 语句</param>
  302. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  303. /// <returns>返回一个对象</returns>
  304. public static object ExecuteScalarText(string cmdText, params SqlParameter[] commandParameters)
  305. {
  306. return ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters);
  307. }
  308. /// <summary>
  309. /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string
  310. /// using the provided parameters.
  311. /// </summary>
  312. /// <remarks>
  313. /// e.g.:
  314. ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
  315. /// </remarks>
  316. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  317. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  318. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  319. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  320. /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
  321. public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  322. {
  323. SqlCommand cmd = new SqlCommand();
  324. using (SqlConnection connection = new SqlConnection(connectionString))
  325. {
  326. PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
  327. object val = cmd.ExecuteScalar();
  328. cmd.Parameters.Clear();
  329. return val;
  330. }
  331. }
  332. /// <summary>
  333. /// Execute a SqlCommand that returns the first column of the first record against an existing database connection
  334. /// using the provided parameters.
  335. /// </summary>
  336. /// <remarks>
  337. /// e.g.:
  338. ///  Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
  339. /// </remarks>
  340. /// <param name="connectionString">一个有效的数据库连接字符串</param>
  341. /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param>
  342. /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param>
  343. /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param>
  344. /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns>
  345. public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters)
  346. {
  347. SqlCommand cmd = new SqlCommand();
  348. PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters);
  349. object val = cmd.ExecuteScalar();
  350. cmd.Parameters.Clear();
  351. return val;
  352. }
  353. #endregion
  354. /// <summary>
  355. /// add parameter array to the cache
  356. /// </summary>
  357. /// <param name="cacheKey">Key to the parameter cache</param>
  358. /// <param name="cmdParms">an array of SqlParamters to be cached</param>
  359. public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters)
  360. {
  361. parmCache[cacheKey] = commandParameters;
  362. }
  363. /// <summary>
  364. /// Retrieve cached parameters
  365. /// </summary>
  366. /// <param name="cacheKey">key used to lookup parameters</param>
  367. /// <returns>Cached SqlParamters array</returns>
  368. public static SqlParameter[] GetCachedParameters(string cacheKey)
  369. {
  370. SqlParameter[] cachedParms = (SqlParameter[])parmCache[cacheKey];
  371. if (cachedParms == null)
  372. return null;
  373. SqlParameter[] clonedParms = new SqlParameter[cachedParms.Length];
  374. for (int i = 0, j = cachedParms.Length; i < j; i++)
  375. clonedParms[i] = (SqlParameter)((ICloneable)cachedParms[i]).Clone();
  376. return clonedParms;
  377. }
  378. /// <summary>
  379. /// 检查是否存在
  380. /// </summary>
  381. /// <param name="strSql">Sql语句</param>
  382. /// <param name="cmdParms">参数</param>
  383. /// <returns>bool结果</returns>
  384. public static bool Exists(string strSql, params SqlParameter[] cmdParms)
  385. {
  386. int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms));
  387. if (cmdresult == 0)
  388. {
  389. return false;
  390. }
  391. else
  392. {
  393. return true;
  394. }
  395. }
  396. }
  397. }
  398. //更多基类库请访问:
  399. //http://tool.sufeinet.com/CodePreview/CodeView.aspx
时间: 2024-12-16 14:03:54

公共的数据库访问访问类 SqlHelper.cs的相关文章

SQLserver数据库操作帮助类SqlHelper

1 SqlHelper源码 using System; using System.Data; using System.Xml; using System.Data.SqlClient; using System.Collections; namespace SQL.Access { /// <summary> /// SqlServer数据访问帮助类 /// </summary> public sealed class SqlHelper { #region 私有构造函数和方法

ADO数据访问助手类SQLServeHelper.cs

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Configuration; using System.Data.SqlClient; using System.Data; namespace test { /// <summary> /// 封装对数据库的操作 /// </summary> public sealed class SQ

C#:数据库通用访问类 SqlHelper

using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Data.SqlTypes; using System.Globalization; using System.IO; using System.Text.RegularExpressions; using System.Xml; using System.Reflection;

分享最近抽空写的一个代码生成器,集成EasyDBUtility数据库访问帮助类

一直想写一个自己的代码生成器,但是因为工作事情多,一直搁置下来,最近下决心终于利用下班时间写完了,现在分享给有需要的朋友,代码生成器集成EasyDBUtility数据库访问帮助类,暂时只支持sqlserver数据库,界面如下 部分代码如下 using System; using System.Collections.Generic; using System.Data; using System.Data.SqlClient; using System.Linq; using System.Te

C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </sum

C#---数据库访问通用类、Access数据库操作类、mysql类 .

//C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;using System.Configuration; namespace XXX{    /// <summary>    /// 针对SQL Server数据库操作的通用类           /// </summary&

sqlserver数据库访问帮助类

1 /// <summary> 2 /// 数据库访问帮助类 3 /// </summary> 4 public static class DbHelper 5 { 6 private const string ConnStr = "server=127.0.0.1;database=db_test;Uid=user1;Pwd=Ps123321;"; 7 8 9 /// <summary> 10 /// 执行 增.删.改 11 /// </su

微软SQLHelper.cs类 中文版

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Configuration; using System.Data; using System.Data.SqlClient; using System.Xml; using System.Collections; namespace LiuYanBanT { public class SqlHelper

2014-07-30 MVC框架中对SQL Server数据库的访问

今天是在吾索实习的第16天.我自己主要学习了基于MVC框架的系统的开发时,对SQL Server数据库的相关访问.其步骤如下: 第一步,在Models文件夹中创建一个类,并命名为Movies.cs,如图1所示: 图1 第二步,在上述Movies.cs文件中的namespace MvcTest.Models{}中输入如下代码: 1 public class Movie 2 { 3 public int ID { get; set; } 4 public string Title { get; se