一、SQL Server
1 /// <summary> 2 /// 数据库的通用访问代码 3 /// 此类为抽象类, 4 /// 不允许实例化,在应用时直接调用即可 5 /// </summary> 6 public abstract class SqlHelper 7 { 8 /// <summary> 9 /// 数据库连接字符串 10 /// </summary> 11 12 public static string connectionString = ""; 13 14 15 // Hashtable to store cached parameters 16 private static Hashtable parmCache = Hashtable.Synchronized(new Hashtable()); 17 18 #region ExecteNonQuery操作方法集合 19 /// <summary> 20 ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。 21 /// 使用参数数组形式提供参数列表 22 /// </summary> 23 /// <param name="connectionString">一个有效的数据库连接字符串</param> 24 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 25 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 26 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 27 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 28 public static bool ExecteNonQuery(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 29 { 30 try 31 { 32 SqlCommand cmd = new SqlCommand(); 33 using (SqlConnection conn = new SqlConnection(connectionString)) 34 { 35 //通过PrePareCommand方法将参数逐个加入到SqlCommand的参数集合中 36 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 37 int val = cmd.ExecuteNonQuery(); 38 //清空SqlCommand中的参数列表 39 cmd.Parameters.Clear(); 40 return val > 0 ? true : false; 41 } 42 } 43 catch 44 { 45 return false; 46 } 47 48 } 49 50 /// <summary> 51 ///执行一个不需要返回值的SqlCommand命令,通过指定专用的连接字符串。 52 /// 使用参数数组形式提供参数列表 53 /// </summary> 54 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 55 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 56 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 57 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 58 public static bool ExecteNonQuery(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 59 { 60 try 61 { 62 return ExecteNonQuery(connectionString, cmdType, cmdText, commandParameters); 63 } 64 catch 65 { 66 return false; 67 } 68 69 } 70 71 /// <summary> 72 ///存储过程专用 73 /// </summary> 74 /// <param name="cmdText">存储过程的名字</param> 75 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 76 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 77 public static bool ExecteNonQueryProducts(string cmdText, params SqlParameter[] commandParameters) 78 { 79 try 80 { 81 return ExecteNonQuery(CommandType.StoredProcedure, cmdText, commandParameters); 82 83 } 84 catch 85 { 86 return false; 87 } 88 } 89 90 /// <summary> 91 ///Sql语句专用 92 /// </summary> 93 /// <param name="cmdText">T_Sql语句</param> 94 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 95 /// <returns>返回一个数值表示此SqlCommand命令执行后影响的行数</returns> 96 public static bool ExecteNonQueryText(string cmdText, params SqlParameter[] commandParameters) 97 { 98 try 99 { 100 return ExecteNonQuery(CommandType.Text, cmdText, commandParameters); 101 } 102 catch 103 { 104 return false; 105 } 106 107 } 108 109 #endregion 110 111 112 #region GetTable操作方法集合 113 114 /// <summary> 115 /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接 116 /// 使用参数数组提供参数 117 /// </summary> 118 /// <param name="connecttionString">一个现有的数据库连接</param> 119 /// <param name="cmdTye">SqlCommand命令类型</param> 120 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 121 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 122 /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns> 123 public static DataTableCollection GetTable(string connecttionString, CommandType cmdTye, string cmdText, SqlParameter[] commandParameters) 124 { 125 try 126 { 127 SqlCommand cmd = new SqlCommand(); 128 DataSet ds = new DataSet(); 129 using (SqlConnection conn = new SqlConnection(connecttionString)) 130 { 131 PrepareCommand(cmd, conn, null, cmdTye, cmdText, commandParameters); 132 SqlDataAdapter adapter = new SqlDataAdapter(); 133 adapter.SelectCommand = cmd; 134 adapter.Fill(ds); 135 } 136 DataTableCollection table = ds.Tables; 137 return table; 138 } 139 catch (Exception ex) 140 { 141 return null; 142 } 143 144 } 145 146 /// <summary> 147 /// 执行一条返回结果集的SqlCommand,通过一个已经存在的数据库连接 148 /// 使用参数数组提供参数 149 /// </summary> 150 /// <param name="cmdTye">SqlCommand命令类型</param> 151 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 152 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 153 /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns> 154 public static DataTableCollection GetTable(CommandType cmdTye, string cmdText, SqlParameter[] commandParameters) 155 { 156 try 157 { 158 return GetTable(SqlHelper.connectionString, cmdTye, cmdText, commandParameters); 159 } 160 catch 161 { 162 return null; 163 164 } 165 166 } 167 168 /// <summary> 169 /// 存储过程专用 170 /// </summary> 171 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 172 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 173 /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns> 174 public static DataTableCollection GetTableProducts(string cmdText, SqlParameter[] commandParameters) 175 { 176 try 177 { 178 return GetTable(CommandType.StoredProcedure, cmdText, commandParameters); 179 } 180 catch 181 { 182 return null; 183 } 184 } 185 186 /// <summary> 187 /// Sql语句专用 188 /// </summary> 189 /// <param name="cmdText"> T-SQL 语句</param> 190 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 191 /// <returns>返回一个表集合(DataTableCollection)表示查询得到的数据集</returns> 192 public static DataTableCollection GetTableText(string cmdText, SqlParameter[] commandParameters) 193 { 194 try 195 { 196 return GetTable(CommandType.Text, cmdText, commandParameters); 197 } 198 catch 199 { 200 System.Windows.Forms.MessageBox.Show("查询后台出现错误,请重试!"); 201 return null; 202 } 203 } 204 205 #endregion 206 207 208 #region 检查是否存在 209 /// <summary> 210 /// 检查是否存在 存在:true 211 /// </summary> 212 /// <param name="strSql">Sql语句</param> 213 /// <param name="cmdParms">参数</param> 214 /// <returns>bool结果</returns> 215 public static bool Exists(string strSql, params SqlParameter[] cmdParms) 216 { 217 try 218 { 219 int cmdresult = Convert.ToInt32(ExecuteScalar(connectionString, CommandType.Text, strSql, cmdParms)); 220 if (cmdresult == 0) 221 { 222 return false; 223 } 224 else 225 { 226 return true; 227 } 228 } 229 catch (Exception ex) 230 { 231 return false; 232 } 233 234 } 235 #endregion 236 237 238 #region 各方法SqlParameter参数处理 239 /// <summary> 240 /// 为执行命令准备参数 241 /// </summary> 242 /// <param name="cmd">SqlCommand 命令</param> 243 /// <param name="conn">已经存在的数据库连接</param> 244 /// <param name="trans">数据库事物处理</param> 245 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 246 /// <param name="cmdText">Command text,T-SQL语句 例如 Select * from Products</param> 247 /// <param name="cmdParms">返回带参数的命令</param> 248 private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms) 249 { 250 try 251 { 252 //判断数据库连接状态 253 if (conn.State != ConnectionState.Open) 254 conn.Open(); 255 cmd.Connection = conn; 256 cmd.CommandText = cmdText; 257 //判断是否需要事物处理 258 if (trans != null) 259 cmd.Transaction = trans; 260 cmd.CommandType = cmdType; 261 if (cmdParms != null) 262 { 263 foreach (SqlParameter parm in cmdParms) 264 cmd.Parameters.Add(parm); 265 } 266 } 267 catch(Exception ex) 268 { 269 MessageBox.Show("连接服务器发生错误,请检查!", "错误!", MessageBoxButtons.OK, MessageBoxIcon.Error); 270 System.Environment.Exit(0); 271 } 272 273 } 274 275 #endregion 276 277 278 #region 其他查询方法集合 279 280 /// <summary> 281 /// 执行命令,返回一个在连接字符串中指定的数据库结果集 282 /// 使用所提供的参数。 283 /// </summary> 284 /// <param name="connectionString">一个有效的数据库连接字符串</param> 285 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 286 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 287 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 288 /// <returns>A SqlDataReader containing the results</returns> 289 public static SqlDataReader ExecuteReader(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 290 { 291 SqlCommand cmd = new SqlCommand(); 292 SqlConnection conn = new SqlConnection(connectionString); 293 // we use a try/catch here because if the method throws an exception we want to 294 // close the connection throw code, because no datareader will exist, hence the 295 // commandBehaviour.CloseConnection will not work 296 try 297 { 298 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 299 SqlDataReader rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); 300 cmd.Parameters.Clear(); 301 return rdr; 302 } 303 catch 304 { 305 conn.Close(); 306 throw; 307 } 308 } 309 310 #region//ExecuteDataSet方法 311 312 /// <summary> 313 /// return a dataset 314 /// </summary> 315 /// <param name="connectionString">一个有效的数据库连接字符串</param> 316 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 317 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 318 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 319 /// <returns>return a dataset</returns> 320 public static DataSet ExecuteDataSet(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 321 { 322 SqlCommand cmd = new SqlCommand(); 323 try 324 { 325 using (SqlConnection conn = new SqlConnection(connectionString)) 326 { 327 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 328 SqlDataAdapter da = new SqlDataAdapter(); 329 DataSet ds = new DataSet(); 330 da.SelectCommand = cmd; 331 da.Fill(ds); 332 return ds; 333 } 334 } 335 catch 336 { 337 throw; 338 } 339 } 340 341 /// <summary> 342 /// 返回一个DataSet 343 /// </summary> 344 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 345 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 346 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 347 /// <returns>return a dataset</returns> 348 public static DataSet ExecuteDataSet(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 349 { 350 return ExecuteDataSet(connectionString, cmdType, cmdText, commandParameters); 351 } 352 353 /// <summary> 354 /// 返回一个DataSet 355 /// </summary> 356 /// <param name="cmdText">存储过程的名字</param> 357 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 358 /// <returns>return a dataset</returns> 359 public static DataSet ExecuteDataSetProducts(string cmdText, params SqlParameter[] commandParameters) 360 { 361 return ExecuteDataSet(connectionString, CommandType.StoredProcedure, cmdText, commandParameters); 362 } 363 364 /// <summary> 365 /// 返回一个DataSet 366 /// </summary> 367 /// <param name="cmdText">T-SQL 语句</param> 368 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 369 /// <returns>return a dataset</returns> 370 public static DataSet ExecuteDataSetText(string cmdText, params SqlParameter[] commandParameters) 371 { 372 return ExecuteDataSet(connectionString, CommandType.Text, cmdText, commandParameters); 373 } 374 375 public static DataView ExecuteDataSet(string connectionString, string sortExpression, string direction, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 376 { 377 SqlCommand cmd = new SqlCommand(); 378 try 379 { 380 using (SqlConnection conn = new SqlConnection(connectionString)) 381 { 382 PrepareCommand(cmd, conn, null, cmdType, cmdText, commandParameters); 383 SqlDataAdapter da = new SqlDataAdapter(); 384 DataSet ds = new DataSet(); 385 da.SelectCommand = cmd; 386 da.Fill(ds); 387 DataView dv = ds.Tables[0].DefaultView; 388 dv.Sort = sortExpression + " " + direction; 389 return dv; 390 } 391 } 392 catch 393 { 394 395 throw; 396 } 397 } 398 #endregion 399 400 #region // ExecuteScalar方法 401 402 /// <summary> 403 /// 返回第一行的第一列 404 /// </summary> 405 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 406 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 407 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 408 /// <returns>返回一个对象</returns> 409 public static object ExecuteScalar(CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 410 { 411 return ExecuteScalar(SqlHelper.connectionString, cmdType, cmdText, commandParameters); 412 } 413 414 /// <summary> 415 /// 返回第一行的第一列存储过程专用 416 /// </summary> 417 /// <param name="cmdText">存储过程的名字</param> 418 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 419 /// <returns>返回一个对象</returns> 420 public static object ExecuteScalarProducts(string cmdText, params SqlParameter[] commandParameters) 421 { 422 return ExecuteScalar(SqlHelper.connectionString, CommandType.StoredProcedure, cmdText, commandParameters); 423 } 424 425 /// <summary> 426 /// 返回第一行的第一列Sql语句专用 427 /// </summary> 428 /// <param name="cmdText">者 T-SQL 语句</param> 429 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 430 /// <returns>返回一个对象</returns> 431 public static object ExecuteScalarText(string cmdText, params SqlParameter[] commandParameters) 432 { 433 return ExecuteScalar(SqlHelper.connectionString, CommandType.Text, cmdText, commandParameters); 434 } 435 436 /// <summary> 437 /// Execute a SqlCommand that returns the first column of the first record against the database specified in the connection string 438 /// using the provided parameters. 439 /// </summary> 440 /// <remarks> 441 /// e.g.: 442 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 443 /// </remarks> 444 /// <param name="connectionString">一个有效的数据库连接字符串</param> 445 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 446 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 447 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 448 /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns> 449 public static object ExecuteScalar(string connectionString, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 450 { 451 SqlCommand cmd = new SqlCommand(); 452 453 using (SqlConnection connection = new SqlConnection(connectionString)) 454 { 455 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 456 object val = cmd.ExecuteScalar(); 457 cmd.Parameters.Clear(); 458 return val; 459 } 460 } 461 462 /// <summary> 463 /// Execute a SqlCommand that returns the first column of the first record against an existing database connection 464 /// using the provided parameters. 465 /// </summary> 466 /// <remarks> 467 /// e.g.: 468 /// Object obj = ExecuteScalar(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24)); 469 /// </remarks> 470 /// <param name="connectionString">一个有效的数据库连接字符串</param> 471 /// <param name="cmdType">SqlCommand命令类型 (存储过程, T-SQL语句, 等等。)</param> 472 /// <param name="cmdText">存储过程的名字或者 T-SQL 语句</param> 473 /// <param name="commandParameters">以数组形式提供SqlCommand命令中用到的参数列表</param> 474 /// <returns>An object that should be converted to the expected type using Convert.To{Type}</returns> 475 public static object ExecuteScalar(SqlConnection connection, CommandType cmdType, string cmdText, params SqlParameter[] commandParameters) 476 { 477 SqlCommand cmd = new SqlCommand(); 478 PrepareCommand(cmd, connection, null, cmdType, cmdText, commandParameters); 479 object val = cmd.ExecuteScalar(); 480 cmd.Parameters.Clear(); 481 return val; 482 } 483 484 #endregion 485 486 /// <summary> 487 /// add parameter array to the cache 488 /// </summary> 489 /// <param name="cacheKey">Key to the parameter cache</param> 490 /// <param name="cmdParms">an array of SqlParamters to be cached</param> 491 public static void CacheParameters(string cacheKey, params SqlParameter[] commandParameters) 492 { 493 parmCache[cacheKey] = commandParameters; 494 } 495 496 #endregion 497 498 499 500 } 501 502 SQLHelper