TA的每日心情 | 开心 2021-12-13 21:45 |
---|
签到天数: 15 天 [LV.4]偶尔看看III
|
- 1 using System;
- 2 using System.Data;
- 3 using System.Xml;
- 4 using System.Data.SqlClient;
- 5 using System.Collections;
- 6 using System.Configuration;
- 7
- 8 namespace BookDAL
- 9 {
- 10 /// <summary>
- 11 /// SqlServer数据访问帮助类
- 12 /// </summary>
- 13 public sealed class SqlHelper
- 14 {
- 15 #region 私有构造函数和方法
- 16
- 17 private SqlHelper() { }
- 18
- 19 /// <summary>
- 20 /// 将SqlParameter参数数组(参数值)分配给SqlCommand命令.
- 21 /// 这个方法将给任何一个参数分配DBNull.Value;
- 22 /// 该操作将阻止默认值的使用.
- 23 /// </summary>
- 24 /// <param name="command">命令名</param>
- 25 /// <param name="commandParameters">SqlParameters数组</param>
- 26 private static void AttachParameters(SqlCommand command, SqlParameter[] commandParameters)
- 27 {
- 28 if (command == null) throw new ArgumentNullException("command");
- 29 if (commandParameters != null)
- 30 {
- 31 foreach (SqlParameter p in commandParameters)
- 32 {
- 33 if (p != null)
- 34 {
- 35 // 检查未分配值的输出参数,将其分配以DBNull.Value.
- 36 if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) &&
- 37 (p.Value == null))
- 38 {
- 39 p.Value = DBNull.Value;
- 40 }
- 41 command.Parameters.Add(p);
- 42 }
- 43 }
- 44 }
- 45 }
- 46
- 47 /// <summary>
- 48 /// 将DataRow类型的列值分配到SqlParameter参数数组.
- 49 /// </summary>
- 50 /// <param name="commandParameters">要分配值的SqlParameter参数数组</param>
- 51 /// <param name="dataRow">将要分配给存储过程参数的DataRow</param>
- 52 private static void AssignParameterValues(SqlParameter[] commandParameters, DataRow dataRow)
- 53 {
- 54 if ((commandParameters == null) || (dataRow == null))
- 55 {
- 56 return;
- 57 }
- 58
- 59 int i = 0;
- 60 // 设置参数值
- 61 foreach (SqlParameter commandParameter in commandParameters)
- 62 {
- 63 // 创建参数名称,如果不存在,只抛出一个异常.
- 64 if (commandParameter.ParameterName == null ||
- 65 commandParameter.ParameterName.Length <= 1)
- 66 throw new Exception(
- 67 string.Format("请提供参数{0}一个有效的名称{1}.", i, commandParameter.ParameterName));
- 68 // 从dataRow的表中获取为参数数组中数组名称的列的索引.
- 69 // 如果存在和参数名称相同的列,则将列值赋给当前名称的参数.
- 70 if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1)) != -1)
- 71 commandParameter.Value = dataRow[commandParameter.ParameterName.Substring(1)];
- 72 i++;
- 73 }
- 74 }
- 75
- 76 /// <summary>
- 77 /// 将一个对象数组分配给SqlParameter参数数组.
- 78 /// </summary>
- 79 /// <param name="commandParameters">要分配值的SqlParameter参数数组</param>
- 80 /// <param name="parameterValues">将要分配给存储过程参数的对象数组</param>
- 81 private static void AssignParameterValues(SqlParameter[] commandParameters, object[] parameterValues)
- 82 {
- 83 if ((commandParameters == null) || (parameterValues == null))
- 84 {
- 85 return;
- 86 }
- 87
- 88 // 确保对象数组个数与参数个数匹配,如果不匹配,抛出一个异常.
- 89 if (commandParameters.Length != parameterValues.Length)
- 90 {
- 91 throw new ArgumentException("参数值个数与参数不匹配.");
- 92 }
- 93
- 94 // 给参数赋值
- 95 for (int i = 0, j = commandParameters.Length; i < j; i++)
- 96 {
- 97 // If the current array value derives from IDbDataParameter, then assign its Value property
- 98 if (parameterValues[i] is IDbDataParameter)
- 99 {
- 100 IDbDataParameter paramInstance = (IDbDataParameter)parameterValues[i];
- 101 if (paramInstance.Value == null)
- 102 {
- 103 commandParameters[i].Value = DBNull.Value;
- 104 }
- 105 else
- 106 {
- 107 commandParameters[i].Value = paramInstance.Value;
- 108 }
- 109 }
- 110 else if (parameterValues[i] == null)
- 111 {
- 112 commandParameters[i].Value = DBNull.Value;
- 113 }
- 114 else
- 115 {
- 116 commandParameters[i].Value = parameterValues[i];
- 117 }
- 118 }
- 119 }
- 120
- 121 /// <summary>
- 122 /// 预处理用户提供的命令,数据库连接/事务/命令类型/参数
- 123 /// </summary>
- 124 /// <param name="command">要处理的SqlCommand</param>
- 125 /// <param name="connection">数据库连接</param>
- 126 /// <param name="transaction">一个有效的事务或者是null值</param>
- 127 /// <param name="commandType">命令类型 (存储过程,命令文本, 其它.)</param>
- 128 /// <param name="commandText">存储过程名或都T-SQL命令文本</param>
- 129 /// <param name="commandParameters">和命令相关联的SqlParameter参数数组,如果没有参数为"null"</param>
- 130 /// <param name="mustCloseConnection"><c>true</c> 如果连接是打开的,则为true,其它情况下为false.</param>
- 131 private static void PrepareCommand(SqlCommand command, SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, out bool mustCloseConnection)
- 132 {
- 133 if (command == null) throw new ArgumentNullException("command");
- 134 if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
- 135
- 136 // If the provided connection is not open, we will open it
- 137 if (connection.State != ConnectionState.Open)
- 138 {
- 139 mustCloseConnection = true;
- 140 connection.Open();
- 141 }
- 142 else
- 143 {
- 144 mustCloseConnection = false;
- 145 }
- 146
- 147 // 给命令分配一个数据库连接.
- 148 command.Connection = connection;
- 149
- 150 // 设置命令文本(存储过程名或SQL语句)
- 151 command.CommandText = commandText;
- 152
- 153 // 分配事务
- 154 if (transaction != null)
- 155 {
- 156 if (transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 157 command.Transaction = transaction;
- 158 }
- 159
- 160 // 设置命令类型.
- 161 command.CommandType = commandType;
- 162
- 163 // 分配命令参数
- 164 if (commandParameters != null)
- 165 {
- 166 AttachParameters(command, commandParameters);
- 167 }
- 168 return;
- 169 }
- 170
- 171 #endregion 私有构造函数和方法结束
- 172
- 173 #region 数据库连接
- 174 /// <summary>
- 175 /// 一个有效的数据库连接字符串
- 176 /// </summary>
- 177 /// <returns></returns>
- 178 public static string GetConnSting()
- 179 {
- 180 return ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;
- 181 }
- 182 /// <summary>
- 183 /// 一个有效的数据库连接对象
- 184 /// </summary>
- 185 /// <returns></returns>
- 186 public static SqlConnection GetConnection()
- 187 {
- 188 SqlConnection Connection = new SqlConnection(SqlHelper.GetConnSting());
- 189 return Connection;
- 190 }
- 191 #endregion
- 192
- 193 #region ExecuteNonQuery命令
- 194
- 195 /// <summary>
- 196 /// 执行指定连接字符串,类型的SqlCommand.
- 197 /// </summary>
- 198 /// <remarks>
- 199 /// 示例:
- 200 /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
- 201 /// </remarks>
- 202 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 203 /// <param name="commandType">命令类型 (存储过程,命令文本, 其它.)</param>
- 204 /// <param name="commandText">存储过程名称或SQL语句</param>
- 205 /// <returns>返回命令影响的行数</returns>
- 206 public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText)
- 207 {
- 208 return ExecuteNonQuery(connectionString, commandType, commandText, (SqlParameter[])null);
- 209 }
- 210
- 211 /// <summary>
- 212 /// 执行指定连接字符串,类型的SqlCommand.如果没有提供参数,不返回结果.
- 213 /// </summary>
- 214 /// <remarks>
- 215 /// 示例:
- 216 /// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
- 217 /// </remarks>
- 218 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 219 /// <param name="commandType">命令类型 (存储过程,命令文本, 其它.)</param>
- 220 /// <param name="commandText">存储过程名称或SQL语句</param>
- 221 /// <param name="commandParameters">SqlParameter参数数组</param>
- 222 /// <returns>返回命令影响的行数</returns>
- 223 public static int ExecuteNonQuery(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 224 {
- 225 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 226
- 227 using (SqlConnection connection = new SqlConnection(connectionString))
- 228 {
- 229 connection.Open();
- 230
- 231 return ExecuteNonQuery(connection, commandType, commandText, commandParameters);
- 232 }
- 233 }
- 234
- 235 /// <summary>
- 236 /// 执行指定连接字符串的存储过程,将对象数组的值赋给存储过程参数,
- 237 /// 此方法需要在参数缓存方法中探索参数并生成参数.
- 238 /// </summary>
- 239 /// <remarks>
- 240 /// 这个方法没有提供访问输出参数和返回值.
- 241 /// 示例:
- 242 /// int result = ExecuteNonQuery(connString, "PublishOrders", 24, 36);
- 243 /// </remarks>
- 244 /// <param name="connectionString">一个有效的数据库连接字符串/param>
- 245 /// <param name="spName">存储过程名称</param>
- 246 /// <param name="parameterValues">分配到存储过程输入参数的对象数组</param>
- 247 /// <returns>返回受影响的行数</returns>
- 248 public static int ExecuteNonQuery(string connectionString, string spName, params object[] parameterValues)
- 249 {
- 250 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 251 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 252
- 253 // 如果存在参数值
- 254 if ((parameterValues != null) && (parameterValues.Length > 0))
- 255 {
- 256 // 从探索存储过程参数(加载到缓存)并分配给存储过程参数数组.
- 257 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 258
- 259 // 给存储过程参数赋值
- 260 AssignParameterValues(commandParameters, parameterValues);
- 261
- 262 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 263 }
- 264 else
- 265 {
- 266 // 没有参数情况下
- 267 return ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
- 268 }
- 269 }
- 270
- 271 /// <summary>
- 272 /// 执行指定数据库连接对象的命令
- 273 /// </summary>
- 274 /// <remarks>
- 275 /// 示例:
- 276 /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
- 277 /// </remarks>
- 278 /// <param name="connection">一个有效的数据库连接对象</param>
- 279 /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
- 280 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 281 /// <returns>返回影响的行数</returns>
- 282 public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText)
- 283 {
- 284 return ExecuteNonQuery(connection, commandType, commandText, (SqlParameter[])null);
- 285 }
- 286
- 287 /// <summary>
- 288 /// 执行指定数据库连接对象的命令
- 289 /// </summary>
- 290 /// <remarks>
- 291 /// 示例:
- 292 /// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new SqlParameter("@prodid", 24));
- 293 /// </remarks>
- 294 /// <param name="connection">一个有效的数据库连接对象</param>
- 295 /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
- 296 /// <param name="commandText">T存储过程名称或T-SQL语句</param>
- 297 /// <param name="commandParameters">SqlParamter参数数组</param>
- 298 /// <returns>返回影响的行数</returns>
- 299 public static int ExecuteNonQuery(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 300 {
- 301 if (connection == null) throw new ArgumentNullException("connection");
- 302
- 303 // 创建SqlCommand命令,并进行预处理
- 304 SqlCommand cmd = new SqlCommand();
- 305 bool mustCloseConnection = false;
- 306 PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
- 307
- 308 // Finally, execute the command
- 309 int retval = cmd.ExecuteNonQuery();
- 310
- 311 // 清除参数,以便再次使用.
- 312 cmd.Parameters.Clear();
- 313 if (mustCloseConnection)
- 314 connection.Close();
- 315 return retval;
- 316 }
- 317
- 318 /// <summary>
- 319 /// 执行指定数据库连接对象的命令,将对象数组的值赋给存储过程参数.
- 320 /// </summary>
- 321 /// <remarks>
- 322 /// 此方法不提供访问存储过程输出参数和返回值
- 323 /// 示例:
- 324 /// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
- 325 /// </remarks>
- 326 /// <param name="connection">一个有效的数据库连接对象</param>
- 327 /// <param name="spName">存储过程名</param>
- 328 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 329 /// <returns>返回影响的行数</returns>
- 330 public static int ExecuteNonQuery(SqlConnection connection, string spName, params object[] parameterValues)
- 331 {
- 332 if (connection == null) throw new ArgumentNullException("connection");
- 333 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 334
- 335 // 如果有参数值
- 336 if ((parameterValues != null) && (parameterValues.Length > 0))
- 337 {
- 338 // 从缓存中加载存储过程参数
- 339 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 340
- 341 // 给存储过程分配参数值
- 342 AssignParameterValues(commandParameters, parameterValues);
- 343
- 344 return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
- 345 }
- 346 else
- 347 {
- 348 return ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
- 349 }
- 350 }
- 351
- 352 /// <summary>
- 353 /// 执行带事务的SqlCommand.
- 354 /// </summary>
- 355 /// <remarks>
- 356 /// 示例.:
- 357 /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
- 358 /// </remarks>
- 359 /// <param name="transaction">一个有效的数据库连接对象</param>
- 360 /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
- 361 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 362 /// <returns>返回影响的行数/returns>
- 363 public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText)
- 364 {
- 365 return ExecuteNonQuery(transaction, commandType, commandText, (SqlParameter[])null);
- 366 }
- 367
- 368 /// <summary>
- 369 /// 执行带事务的SqlCommand(指定参数).
- 370 /// </summary>
- 371 /// <remarks>
- 372 /// 示例:
- 373 /// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 374 /// </remarks>
- 375 /// <param name="transaction">一个有效的数据库连接对象</param>
- 376 /// <param name="commandType">命令类型(存储过程,命令文本或其它.)</param>
- 377 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 378 /// <param name="commandParameters">SqlParamter参数数组</param>
- 379 /// <returns>返回影响的行数</returns>
- 380 public static int ExecuteNonQuery(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 381 {
- 382 if (transaction == null) throw new ArgumentNullException("transaction");
- 383 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 384
- 385 // 预处理
- 386 SqlCommand cmd = new SqlCommand();
- 387 bool mustCloseConnection = false;
- 388 PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 389
- 390 // 执行
- 391 int retval = cmd.ExecuteNonQuery();
- 392
- 393 // 清除参数集,以便再次使用.
- 394 cmd.Parameters.Clear();
- 395 return retval;
- 396 }
- 397
- 398 /// <summary>
- 399 /// 执行带事务的SqlCommand(指定参数值).
- 400 /// </summary>
- 401 /// <remarks>
- 402 /// 此方法不提供访问存储过程输出参数和返回值
- 403 /// 示例:
- 404 /// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
- 405 /// </remarks>
- 406 /// <param name="transaction">一个有效的数据库连接对象</param>
- 407 /// <param name="spName">存储过程名</param>
- 408 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 409 /// <returns>返回受影响的行数</returns>
- 410 public static int ExecuteNonQuery(SqlTransaction transaction, string spName, params object[] parameterValues)
- 411 {
- 412 if (transaction == null) throw new ArgumentNullException("transaction");
- 413 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 414 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 415
- 416 // 如果有参数值
- 417 if ((parameterValues != null) && (parameterValues.Length > 0))
- 418 {
- 419 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 420 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 421
- 422 // 给存储过程参数赋值
- 423 AssignParameterValues(commandParameters, parameterValues);
- 424
- 425 // 调用重载方法
- 426 return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 427 }
- 428 else
- 429 {
- 430 // 没有参数值
- 431 return ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
- 432 }
- 433 }
- 434
- 435 #endregion ExecuteNonQuery方法结束
- 436
- 437 #region ExecuteDataset方法
- 438
- 439 /// <summary>
- 440 /// 执行指定数据库连接字符串的命令,返回DataSet.
- 441 /// </summary>
- 442 /// <remarks>
- 443 /// 示例:
- 444 /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
- 445 /// </remarks>
- 446 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 447 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 448 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 449 /// <returns>返回一个包含结果集的DataSet</returns>
- 450 public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText)
- 451 {
- 452 return ExecuteDataset(connectionString, commandType, commandText, (SqlParameter[])null);
- 453 }
- 454
- 455 /// <summary>
- 456 /// 执行指定数据库连接字符串的命令,返回DataSet.
- 457 /// </summary>
- 458 /// <remarks>
- 459 /// 示例:
- 460 /// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 461 /// </remarks>
- 462 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 463 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 464 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 465 /// <param name="commandParameters">SqlParamters参数数组</param>
- 466 /// <returns>返回一个包含结果集的DataSet</returns>
- 467 public static DataSet ExecuteDataset(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 468 {
- 469 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 470
- 471 // 创建并打开数据库连接对象,操作完成释放对象.
- 472 using (SqlConnection connection = new SqlConnection(connectionString))
- 473 {
- 474 connection.Open();
- 475
- 476 // 调用指定数据库连接字符串重载方法.
- 477 return ExecuteDataset(connection, commandType, commandText, commandParameters);
- 478 }
- 479 }
- 480
- 481 /// <summary>
- 482 /// 执行指定数据库连接字符串的命令,直接提供参数值,返回DataSet.
- 483 /// </summary>
- 484 /// <remarks>
- 485 /// 此方法不提供访问存储过程输出参数和返回值.
- 486 /// 示例:
- 487 /// DataSet ds = ExecuteDataset(connString, "GetOrders", 24, 36);
- 488 /// </remarks>
- 489 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 490 /// <param name="spName">存储过程名</param>
- 491 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 492 /// <returns>返回一个包含结果集的DataSet</returns>
- 493 public static DataSet ExecuteDataset(string connectionString, string spName, params object[] parameterValues)
- 494 {
- 495 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 496 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 497
- 498 if ((parameterValues != null) && (parameterValues.Length > 0))
- 499 {
- 500 // 从缓存中检索存储过程参数
- 501 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 502
- 503 // 给存储过程参数分配值
- 504 AssignParameterValues(commandParameters, parameterValues);
- 505
- 506 return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 507 }
- 508 else
- 509 {
- 510 return ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
- 511 }
- 512 }
- 513
- 514 /// <summary>
- 515 /// 执行指定数据库连接对象的命令,返回DataSet.
- 516 /// </summary>
- 517 /// <remarks>
- 518 /// 示例:
- 519 /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
- 520 /// </remarks>
- 521 /// <param name="connection">一个有效的数据库连接对象</param>
- 522 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 523 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 524 /// <returns>返回一个包含结果集的DataSet</returns>
- 525 public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText)
- 526 {
- 527 return ExecuteDataset(connection, commandType, commandText, (SqlParameter[])null);
- 528 }
- 529
- 530 /// <summary>
- 531 /// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.
- 532 /// </summary>
- 533 /// <remarks>
- 534 /// 示例:
- 535 /// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 536 /// </remarks>
- 537 /// <param name="connection">一个有效的数据库连接对象</param>
- 538 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 539 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 540 /// <param name="commandParameters">SqlParamter参数数组</param>
- 541 /// <returns>返回一个包含结果集的DataSet</returns>
- 542 public static DataSet ExecuteDataset(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 543 {
- 544 if (connection == null) throw new ArgumentNullException("connection");
- 545
- 546 // 预处理
- 547 SqlCommand cmd = new SqlCommand();
- 548 bool mustCloseConnection = false;
- 549 PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
- 550
- 551 // 创建SqlDataAdapter和DataSet.
- 552 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
- 553 {
- 554 DataSet ds = new DataSet();
- 555
- 556 // 填充DataSet.
- 557 da.Fill(ds);
- 558
- 559 cmd.Parameters.Clear();
- 560
- 561 if (mustCloseConnection)
- 562 connection.Close();
- 563
- 564 return ds;
- 565 }
- 566 }
- 567
- 568 /// <summary>
- 569 /// 执行指定数据库连接对象的命令,指定参数值,返回DataSet.
- 570 /// </summary>
- 571 /// <remarks>
- 572 /// 此方法不提供访问存储过程输入参数和返回值.
- 573 /// 示例.:
- 574 /// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
- 575 /// </remarks>
- 576 /// <param name="connection">一个有效的数据库连接对象</param>
- 577 /// <param name="spName">存储过程名</param>
- 578 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 579 /// <returns>返回一个包含结果集的DataSet</returns>
- 580 public static DataSet ExecuteDataset(SqlConnection connection, string spName, params object[] parameterValues)
- 581 {
- 582 if (connection == null) throw new ArgumentNullException("connection");
- 583 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 584
- 585 if ((parameterValues != null) && (parameterValues.Length > 0))
- 586 {
- 587 // 比缓存中加载存储过程参数
- 588 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 589
- 590 // 给存储过程参数分配值
- 591 AssignParameterValues(commandParameters, parameterValues);
- 592
- 593 return ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
- 594 }
- 595 else
- 596 {
- 597 return ExecuteDataset(connection, CommandType.StoredProcedure, spName);
- 598 }
- 599 }
- 600
- 601 /// <summary>
- 602 /// 执行指定事务的命令,返回DataSet.
- 603 /// </summary>
- 604 /// <remarks>
- 605 /// 示例:
- 606 /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
- 607 /// </remarks>
- 608 /// <param name="transaction">事务</param>
- 609 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 610 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 611 /// <returns>返回一个包含结果集的DataSet</returns>
- 612 public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText)
- 613 {
- 614 return ExecuteDataset(transaction, commandType, commandText, (SqlParameter[])null);
- 615 }
- 616
- 617 /// <summary>
- 618 /// 执行指定事务的命令,指定参数,返回DataSet.
- 619 /// </summary>
- 620 /// <remarks>
- 621 /// 示例:
- 622 /// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 623 /// </remarks>
- 624 /// <param name="transaction">事务</param>
- 625 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 626 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 627 /// <param name="commandParameters">SqlParamter参数数组</param>
- 628 /// <returns>返回一个包含结果集的DataSet</returns>
- 629 public static DataSet ExecuteDataset(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 630 {
- 631 if (transaction == null) throw new ArgumentNullException("transaction");
- 632 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 633
- 634 // 预处理
- 635 SqlCommand cmd = new SqlCommand();
- 636 bool mustCloseConnection = false;
- 637 PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 638
- 639 // 创建 DataAdapter & DataSet
- 640 using (SqlDataAdapter da = new SqlDataAdapter(cmd))
- 641 {
- 642 DataSet ds = new DataSet();
- 643 da.Fill(ds);
- 644 cmd.Parameters.Clear();
- 645 return ds;
- 646 }
- 647 }
- 648
- 649 /// <summary>
- 650 /// 执行指定事务的命令,指定参数值,返回DataSet.
- 651 /// </summary>
- 652 /// <remarks>
- 653 /// 此方法不提供访问存储过程输入参数和返回值.
- 654 /// 示例.:
- 655 /// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
- 656 /// </remarks>
- 657 /// <param name="transaction">事务</param>
- 658 /// <param name="spName">存储过程名</param>
- 659 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 660 /// <returns>返回一个包含结果集的DataSet</returns>
- 661 public static DataSet ExecuteDataset(SqlTransaction transaction, string spName, params object[] parameterValues)
- 662 {
- 663 if (transaction == null) throw new ArgumentNullException("transaction");
- 664 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 665 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 666
- 667 if ((parameterValues != null) && (parameterValues.Length > 0))
- 668 {
- 669 // 从缓存中加载存储过程参数
- 670 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 671
- 672 // 给存储过程参数分配值
- 673 AssignParameterValues(commandParameters, parameterValues);
- 674
- 675 return ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 676 }
- 677 else
- 678 {
- 679 return ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
- 680 }
- 681 }
- 682
- 683 #endregion ExecuteDataset数据集命令结束
- 684
- 685 #region ExecuteReader 数据阅读器
- 686
- 687 /// <summary>
- 688 /// 枚举,标识数据库连接是由SqlHelper提供还是由调用者提供
- 689 /// </summary>
- 690 private enum SqlConnectionOwnership
- 691 {
- 692 /// <summary>由SqlHelper提供连接</summary>
- 693 Internal,
- 694 /// <summary>由调用者提供连接</summary>
- 695 External
- 696 }
- 697
- 698 /// <summary>
- 699 /// 执行指定数据库连接对象的数据阅读器.
- 700 /// </summary>
- 701 /// <remarks>
- 702 /// 如果是SqlHelper打开连接,当连接关闭DataReader也将关闭.
- 703 /// 如果是调用都打开连接,DataReader由调用都管理.
- 704 /// </remarks>
- 705 /// <param name="connection">一个有效的数据库连接对象</param>
- 706 /// <param name="transaction">一个有效的事务,或者为 "null"</param>
- 707 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 708 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 709 /// <param name="commandParameters">SqlParameters参数数组,如果没有参数则为"null"</param>
- 710 /// <param name="connectionOwnership">标识数据库连接对象是由调用者提供还是由SqlHelper提供</param>
- 711 /// <returns>返回包含结果集的SqlDataReader</returns>
- 712 private static SqlDataReader ExecuteReader(SqlConnection connection, SqlTransaction transaction, CommandType commandType, string commandText, SqlParameter[] commandParameters, SqlConnectionOwnership connectionOwnership)
- 713 {
- 714 if (connection == null) throw new ArgumentNullException("connection");
- 715
- 716 bool mustCloseConnection = false;
- 717 // 创建命令
- 718 SqlCommand cmd = new SqlCommand();
- 719 try
- 720 {
- 721 PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 722
- 723 // 创建数据阅读器
- 724 SqlDataReader dataReader;
- 725
- 726 if (connectionOwnership == SqlConnectionOwnership.External)
- 727 {
- 728 dataReader = cmd.ExecuteReader();
- 729 }
- 730 else
- 731 {
- 732 dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
- 733 }
- 734
- 735 // 清除参数,以便再次使用..
- 736 // HACK: There is a problem here, the output parameter values are fletched
- 737 // when the reader is closed, so if the parameters are detached from the command
- 738 // then the SqlReader can磘 set its values.
- 739 // When this happen, the parameters can磘 be used again in other command.
- 740 bool canClear = true;
- 741 foreach (SqlParameter commandParameter in cmd.Parameters)
- 742 {
- 743 if (commandParameter.Direction != ParameterDirection.Input)
- 744 canClear = false;
- 745 }
- 746
- 747 if (canClear)
- 748 {
- 749 cmd.Parameters.Clear();
- 750 }
- 751
- 752 return dataReader;
- 753 }
- 754 catch
- 755 {
- 756 if (mustCloseConnection)
- 757 connection.Close();
- 758 throw;
- 759 }
- 760 }
- 761
- 762 /// <summary>
- 763 /// 执行指定数据库连接字符串的数据阅读器.
- 764 /// </summary>
- 765 /// <remarks>
- 766 /// 示例:
- 767 /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
- 768 /// </remarks>
- 769 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 770 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 771 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 772 /// <returns>返回包含结果集的SqlDataReader</returns>
- 773 public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText)
- 774 {
- 775 return ExecuteReader(connectionString, commandType, commandText, (SqlParameter[])null);
- 776 }
- 777
- 778 /// <summary>
- 779 /// 执行指定数据库连接字符串的数据阅读器,指定参数.
- 780 /// </summary>
- 781 /// <remarks>
- 782 /// 示例:
- 783 /// SqlDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 784 /// </remarks>
- 785 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 786 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 787 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 788 /// <param name="commandParameters">SqlParamter参数数组(new SqlParameter("@prodid", 24))</param>
- 789 /// <returns>返回包含结果集的SqlDataReader</returns>
- 790 public static SqlDataReader ExecuteReader(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 791 {
- 792 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 793 SqlConnection connection = null;
- 794 try
- 795 {
- 796 connection = new SqlConnection(connectionString);
- 797 connection.Open();
- 798
- 799 return ExecuteReader(connection, null, commandType, commandText, commandParameters, SqlConnectionOwnership.Internal);
- 800 }
- 801 catch
- 802 {
- 803 // If we fail to return the SqlDatReader, we need to close the connection ourselves
- 804 if (connection != null) connection.Close();
- 805 throw;
- 806 }
- 807
- 808 }
- 809
- 810 /// <summary>
- 811 /// 执行指定数据库连接字符串的数据阅读器,指定参数值.
- 812 /// </summary>
- 813 /// <remarks>
- 814 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 815 /// 示例:
- 816 /// SqlDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
- 817 /// </remarks>
- 818 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 819 /// <param name="spName">存储过程名</param>
- 820 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 821 /// <returns>返回包含结果集的SqlDataReader</returns>
- 822 public static SqlDataReader ExecuteReader(string connectionString, string spName, params object[] parameterValues)
- 823 {
- 824 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 825 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 826
- 827 if ((parameterValues != null) && (parameterValues.Length > 0))
- 828 {
- 829 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 830
- 831 AssignParameterValues(commandParameters, parameterValues);
- 832
- 833 return ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 834 }
- 835 else
- 836 {
- 837 return ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
- 838 }
- 839 }
- 840
- 841 /// <summary>
- 842 /// 执行指定数据库连接对象的数据阅读器.
- 843 /// </summary>
- 844 /// <remarks>
- 845 /// 示例:
- 846 /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
- 847 /// </remarks>
- 848 /// <param name="connection">一个有效的数据库连接对象</param>
- 849 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 850 /// <param name="commandText">存储过程名或T-SQL语句</param>
- 851 /// <returns>返回包含结果集的SqlDataReader</returns>
- 852 public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText)
- 853 {
- 854 return ExecuteReader(connection, commandType, commandText, (SqlParameter[])null);
- 855 }
- 856
- 857 /// <summary>
- 858 /// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数.
- 859 /// </summary>
- 860 /// <remarks>
- 861 /// 示例:
- 862 /// SqlDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 863 /// </remarks>
- 864 /// <param name="connection">一个有效的数据库连接对象</param>
- 865 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 866 /// <param name="commandText">命令类型 (存储过程,命令文本或其它)</param>
- 867 /// <param name="commandParameters">SqlParamter参数数组</param>
- 868 /// <returns>返回包含结果集的SqlDataReader</returns>
- 869 public static SqlDataReader ExecuteReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 870 {
- 871 return ExecuteReader(connection, (SqlTransaction)null, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
- 872 }
- 873
- 874 /// <summary>
- 875 /// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数值.
- 876 /// </summary>
- 877 /// <remarks>
- 878 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 879 /// 示例:
- 880 /// SqlDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
- 881 /// </remarks>
- 882 /// <param name="connection">一个有效的数据库连接对象</param>
- 883 /// <param name="spName">T存储过程名</param>
- 884 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 885 /// <returns>返回包含结果集的SqlDataReader</returns>
- 886 public static SqlDataReader ExecuteReader(SqlConnection connection, string spName, params object[] parameterValues)
- 887 {
- 888 if (connection == null) throw new ArgumentNullException("connection");
- 889 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 890
- 891 if ((parameterValues != null) && (parameterValues.Length > 0))
- 892 {
- 893 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 894
- 895 AssignParameterValues(commandParameters, parameterValues);
- 896
- 897 return ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
- 898 }
- 899 else
- 900 {
- 901 return ExecuteReader(connection, CommandType.StoredProcedure, spName);
- 902 }
- 903 }
- 904
- 905 /// <summary>
- 906 /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.
- 907 /// </summary>
- 908 /// <remarks>
- 909 /// 示例:
- 910 /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
- 911 /// </remarks>
- 912 /// <param name="transaction">一个有效的连接事务</param>
- 913 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 914 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 915 /// <returns>返回包含结果集的SqlDataReader</returns>
- 916 public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText)
- 917 {
- 918 return ExecuteReader(transaction, commandType, commandText, (SqlParameter[])null);
- 919 }
- 920
- 921 /// <summary>
- 922 /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数.
- 923 /// </summary>
- 924 /// <remarks>
- 925 /// 示例:
- 926 /// SqlDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 927 /// </remarks>
- 928 /// <param name="transaction">一个有效的连接事务</param>
- 929 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 930 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 931 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 932 /// <returns>返回包含结果集的SqlDataReader</returns>
- 933 public static SqlDataReader ExecuteReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 934 {
- 935 if (transaction == null) throw new ArgumentNullException("transaction");
- 936 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 937
- 938 return ExecuteReader(transaction.Connection, transaction, commandType, commandText, commandParameters, SqlConnectionOwnership.External);
- 939 }
- 940
- 941 /// <summary>
- 942 /// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.
- 943 /// </summary>
- 944 /// <remarks>
- 945 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 946 ///
- 947 /// 示例:
- 948 /// SqlDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
- 949 /// </remarks>
- 950 /// <param name="transaction">一个有效的连接事务</param>
- 951 /// <param name="spName">存储过程名称</param>
- 952 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 953 /// <returns>返回包含结果集的SqlDataReader</returns>
- 954 public static SqlDataReader ExecuteReader(SqlTransaction transaction, string spName, params object[] parameterValues)
- 955 {
- 956 if (transaction == null) throw new ArgumentNullException("transaction");
- 957 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 958 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 959
- 960 // 如果有参数值
- 961 if ((parameterValues != null) && (parameterValues.Length > 0))
- 962 {
- 963 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 964
- 965 AssignParameterValues(commandParameters, parameterValues);
- 966
- 967 return ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 968 }
- 969 else
- 970 {
- 971 // 没有参数值
- 972 return ExecuteReader(transaction, CommandType.StoredProcedure, spName);
- 973 }
- 974 }
- 975
- 976 #endregion ExecuteReader数据阅读器
- 977
- 978 #region ExecuteScalar 返回结果集中的第一行第一列
- 979
- 980 /// <summary>
- 981 /// 执行指定数据库连接字符串的命令,返回结果集中的第一行第一列.
- 982 /// </summary>
- 983 /// <remarks>
- 984 /// 示例:
- 985 /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
- 986 /// </remarks>
- 987 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 988 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 989 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 990 /// <returns>返回结果集中的第一行第一列</returns>
- 991 public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText)
- 992 {
- 993 // 执行参数为空的方法
- 994 return ExecuteScalar(connectionString, commandType, commandText, (SqlParameter[])null);
- 995 }
- 996
- 997 /// <summary>
- 998 /// 执行指定数据库连接字符串的命令,指定参数,返回结果集中的第一行第一列.
- 999 /// </summary>
- 1000 /// <remarks>
- 1001 /// 示例:
- 1002 /// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
- 1003 /// </remarks>
- 1004 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1005 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1006 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1007 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1008 /// <returns>返回结果集中的第一行第一列</returns>
- 1009 public static object ExecuteScalar(string connectionString, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 1010 {
- 1011 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1012 // 创建并打开数据库连接对象,操作完成释放对象.
- 1013 using (SqlConnection connection = new SqlConnection(connectionString))
- 1014 {
- 1015 connection.Open();
- 1016
- 1017 // 调用指定数据库连接字符串重载方法.
- 1018 return ExecuteScalar(connection, commandType, commandText, commandParameters);
- 1019 }
- 1020 }
- 1021
- 1022 /// <summary>
- 1023 /// 执行指定数据库连接字符串的命令,指定参数值,返回结果集中的第一行第一列.
- 1024 /// </summary>
- 1025 /// <remarks>
- 1026 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1027 ///
- 1028 /// 示例:
- 1029 /// int orderCount = (int)ExecuteScalar(connString, "GetOrderCount", 24, 36);
- 1030 /// </remarks>
- 1031 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1032 /// <param name="spName">存储过程名称</param>
- 1033 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1034 /// <returns>返回结果集中的第一行第一列</returns>
- 1035 public static object ExecuteScalar(string connectionString, string spName, params object[] parameterValues)
- 1036 {
- 1037 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1038 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1039
- 1040 // 如果有参数值
- 1041 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1042 {
- 1043 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1044 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 1045
- 1046 // 给存储过程参数赋值
- 1047 AssignParameterValues(commandParameters, parameterValues);
- 1048
- 1049 // 调用重载方法
- 1050 return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 1051 }
- 1052 else
- 1053 {
- 1054 // 没有参数值
- 1055 return ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
- 1056 }
- 1057 }
- 1058
- 1059 /// <summary>
- 1060 /// 执行指定数据库连接对象的命令,返回结果集中的第一行第一列.
- 1061 /// </summary>
- 1062 /// <remarks>
- 1063 /// 示例:
- 1064 /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
- 1065 /// </remarks>
- 1066 /// <param name="connection">一个有效的数据库连接对象</param>
- 1067 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1068 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1069 /// <returns>返回结果集中的第一行第一列</returns>
- 1070 public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText)
- 1071 {
- 1072 // 执行参数为空的方法
- 1073 return ExecuteScalar(connection, commandType, commandText, (SqlParameter[])null);
- 1074 }
- 1075
- 1076 /// <summary>
- 1077 /// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.
- 1078 /// </summary>
- 1079 /// <remarks>
- 1080 /// 示例:
- 1081 /// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
- 1082 /// </remarks>
- 1083 /// <param name="connection">一个有效的数据库连接对象</param>
- 1084 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1085 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1086 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1087 /// <returns>返回结果集中的第一行第一列</returns>
- 1088 public static object ExecuteScalar(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 1089 {
- 1090 if (connection == null) throw new ArgumentNullException("connection");
- 1091
- 1092 // 创建SqlCommand命令,并进行预处理
- 1093 SqlCommand cmd = new SqlCommand();
- 1094
- 1095 bool mustCloseConnection = false;
- 1096 PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
- 1097
- 1098 // 执行SqlCommand命令,并返回结果.
- 1099 object retval = cmd.ExecuteScalar();
- 1100
- 1101 // 清除参数,以便再次使用.
- 1102 cmd.Parameters.Clear();
- 1103
- 1104 if (mustCloseConnection)
- 1105 connection.Close();
- 1106
- 1107 return retval;
- 1108 }
- 1109
- 1110 /// <summary>
- 1111 /// 执行指定数据库连接对象的命令,指定参数值,返回结果集中的第一行第一列.
- 1112 /// </summary>
- 1113 /// <remarks>
- 1114 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1115 ///
- 1116 /// 示例:
- 1117 /// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
- 1118 /// </remarks>
- 1119 /// <param name="connection">一个有效的数据库连接对象</param>
- 1120 /// <param name="spName">存储过程名称</param>
- 1121 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1122 /// <returns>返回结果集中的第一行第一列</returns>
- 1123 public static object ExecuteScalar(SqlConnection connection, string spName, params object[] parameterValues)
- 1124 {
- 1125 if (connection == null) throw new ArgumentNullException("connection");
- 1126 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1127
- 1128 // 如果有参数值
- 1129 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1130 {
- 1131 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1132 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1133
- 1134 // 给存储过程参数赋值
- 1135 AssignParameterValues(commandParameters, parameterValues);
- 1136
- 1137 // 调用重载方法
- 1138 return ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
- 1139 }
- 1140 else
- 1141 {
- 1142 // 没有参数值
- 1143 return ExecuteScalar(connection, CommandType.StoredProcedure, spName);
- 1144 }
- 1145 }
- 1146
- 1147 /// <summary>
- 1148 /// 执行指定数据库事务的命令,返回结果集中的第一行第一列.
- 1149 /// </summary>
- 1150 /// <remarks>
- 1151 /// 示例:
- 1152 /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
- 1153 /// </remarks>
- 1154 /// <param name="transaction">一个有效的连接事务</param>
- 1155 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1156 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1157 /// <returns>返回结果集中的第一行第一列</returns>
- 1158 public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText)
- 1159 {
- 1160 // 执行参数为空的方法
- 1161 return ExecuteScalar(transaction, commandType, commandText, (SqlParameter[])null);
- 1162 }
- 1163
- 1164 /// <summary>
- 1165 /// 执行指定数据库事务的命令,指定参数,返回结果集中的第一行第一列.
- 1166 /// </summary>
- 1167 /// <remarks>
- 1168 /// 示例:
- 1169 /// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new SqlParameter("@prodid", 24));
- 1170 /// </remarks>
- 1171 /// <param name="transaction">一个有效的连接事务</param>
- 1172 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1173 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1174 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1175 /// <returns>返回结果集中的第一行第一列</returns>
- 1176 public static object ExecuteScalar(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 1177 {
- 1178 if (transaction == null) throw new ArgumentNullException("transaction");
- 1179 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1180
- 1181 // 创建SqlCommand命令,并进行预处理
- 1182 SqlCommand cmd = new SqlCommand();
- 1183 bool mustCloseConnection = false;
- 1184 PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 1185
- 1186 // 执行SqlCommand命令,并返回结果.
- 1187 object retval = cmd.ExecuteScalar();
- 1188
- 1189 // 清除参数,以便再次使用.
- 1190 cmd.Parameters.Clear();
- 1191 return retval;
- 1192 }
- 1193
- 1194 /// <summary>
- 1195 /// 执行指定数据库事务的命令,指定参数值,返回结果集中的第一行第一列.
- 1196 /// </summary>
- 1197 /// <remarks>
- 1198 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1199 ///
- 1200 /// 示例:
- 1201 /// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
- 1202 /// </remarks>
- 1203 /// <param name="transaction">一个有效的连接事务</param>
- 1204 /// <param name="spName">存储过程名称</param>
- 1205 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1206 /// <returns>返回结果集中的第一行第一列</returns>
- 1207 public static object ExecuteScalar(SqlTransaction transaction, string spName, params object[] parameterValues)
- 1208 {
- 1209 if (transaction == null) throw new ArgumentNullException("transaction");
- 1210 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1211 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1212
- 1213 // 如果有参数值
- 1214 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1215 {
- 1216 // PPull the parameters for this stored procedure from the parameter cache ()
- 1217 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 1218
- 1219 // 给存储过程参数赋值
- 1220 AssignParameterValues(commandParameters, parameterValues);
- 1221
- 1222 // 调用重载方法
- 1223 return ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 1224 }
- 1225 else
- 1226 {
- 1227 // 没有参数值
- 1228 return ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
- 1229 }
- 1230 }
- 1231
- 1232 #endregion ExecuteScalar
- 1233
- 1234 #region ExecuteXmlReader XML阅读器
- 1235 /// <summary>
- 1236 /// 执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回.
- 1237 /// </summary>
- 1238 /// <remarks>
- 1239 /// 示例:
- 1240 /// XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders");
- 1241 /// </remarks>
- 1242 /// <param name="connection">一个有效的数据库连接对象</param>
- 1243 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1244 /// <param name="commandText">存储过程名称或T-SQL语句 using "FOR XML AUTO"</param>
- 1245 /// <returns>返回XmlReader结果集对象.</returns>
- 1246 public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText)
- 1247 {
- 1248 // 执行参数为空的方法
- 1249 return ExecuteXmlReader(connection, commandType, commandText, (SqlParameter[])null);
- 1250 }
- 1251
- 1252 /// <summary>
- 1253 /// 执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数.
- 1254 /// </summary>
- 1255 /// <remarks>
- 1256 /// 示例:
- 1257 /// XmlReader r = ExecuteXmlReader(conn, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 1258 /// </remarks>
- 1259 /// <param name="connection">一个有效的数据库连接对象</param>
- 1260 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1261 /// <param name="commandText">存储过程名称或T-SQL语句 using "FOR XML AUTO"</param>
- 1262 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1263 /// <returns>返回XmlReader结果集对象.</returns>
- 1264 public static XmlReader ExecuteXmlReader(SqlConnection connection, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 1265 {
- 1266 if (connection == null) throw new ArgumentNullException("connection");
- 1267
- 1268 bool mustCloseConnection = false;
- 1269 // 创建SqlCommand命令,并进行预处理
- 1270 SqlCommand cmd = new SqlCommand();
- 1271 try
- 1272 {
- 1273 PrepareCommand(cmd, connection, (SqlTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
- 1274
- 1275 // 执行命令
- 1276 XmlReader retval = cmd.ExecuteXmlReader();
- 1277
- 1278 // 清除参数,以便再次使用.
- 1279 cmd.Parameters.Clear();
- 1280
- 1281 return retval;
- 1282 }
- 1283 catch
- 1284 {
- 1285 if (mustCloseConnection)
- 1286 connection.Close();
- 1287 throw;
- 1288 }
- 1289 }
- 1290
- 1291 /// <summary>
- 1292 /// 执行指定数据库连接对象的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数值.
- 1293 /// </summary>
- 1294 /// <remarks>
- 1295 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1296 ///
- 1297 /// 示例:
- 1298 /// XmlReader r = ExecuteXmlReader(conn, "GetOrders", 24, 36);
- 1299 /// </remarks>
- 1300 /// <param name="connection">一个有效的数据库连接对象</param>
- 1301 /// <param name="spName">存储过程名称 using "FOR XML AUTO"</param>
- 1302 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1303 /// <returns>返回XmlReader结果集对象.</returns>
- 1304 public static XmlReader ExecuteXmlReader(SqlConnection connection, string spName, params object[] parameterValues)
- 1305 {
- 1306 if (connection == null) throw new ArgumentNullException("connection");
- 1307 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1308
- 1309 // 如果有参数值
- 1310 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1311 {
- 1312 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1313 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1314
- 1315 // 给存储过程参数赋值
- 1316 AssignParameterValues(commandParameters, parameterValues);
- 1317
- 1318 // 调用重载方法
- 1319 return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
- 1320 }
- 1321 else
- 1322 {
- 1323 // 没有参数值
- 1324 return ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
- 1325 }
- 1326 }
- 1327
- 1328 /// <summary>
- 1329 /// 执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回.
- 1330 /// </summary>
- 1331 /// <remarks>
- 1332 /// 示例:
- 1333 /// XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders");
- 1334 /// </remarks>
- 1335 /// <param name="transaction">一个有效的连接事务</param>
- 1336 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1337 /// <param name="commandText">存储过程名称或T-SQL语句 using "FOR XML AUTO"</param>
- 1338 /// <returns>返回XmlReader结果集对象.</returns>
- 1339 public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText)
- 1340 {
- 1341 // 执行参数为空的方法
- 1342 return ExecuteXmlReader(transaction, commandType, commandText, (SqlParameter[])null);
- 1343 }
- 1344
- 1345 /// <summary>
- 1346 /// 执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数.
- 1347 /// </summary>
- 1348 /// <remarks>
- 1349 /// 示例:
- 1350 /// XmlReader r = ExecuteXmlReader(trans, CommandType.StoredProcedure, "GetOrders", new SqlParameter("@prodid", 24));
- 1351 /// </remarks>
- 1352 /// <param name="transaction">一个有效的连接事务</param>
- 1353 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1354 /// <param name="commandText">存储过程名称或T-SQL语句 using "FOR XML AUTO"</param>
- 1355 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1356 /// <returns>返回XmlReader结果集对象.</returns>
- 1357 public static XmlReader ExecuteXmlReader(SqlTransaction transaction, CommandType commandType, string commandText, params SqlParameter[] commandParameters)
- 1358 {
- 1359 if (transaction == null) throw new ArgumentNullException("transaction");
- 1360 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1361
- 1362 // 创建SqlCommand命令,并进行预处理
- 1363 SqlCommand cmd = new SqlCommand();
- 1364 bool mustCloseConnection = false;
- 1365 PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 1366
- 1367 // 执行命令
- 1368 XmlReader retval = cmd.ExecuteXmlReader();
- 1369
- 1370 // 清除参数,以便再次使用.
- 1371 cmd.Parameters.Clear();
- 1372 return retval;
- 1373 }
- 1374
- 1375 /// <summary>
- 1376 /// 执行指定数据库事务的SqlCommand命令,并产生一个XmlReader对象做为结果集返回,指定参数值.
- 1377 /// </summary>
- 1378 /// <remarks>
- 1379 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1380 ///
- 1381 /// 示例:
- 1382 /// XmlReader r = ExecuteXmlReader(trans, "GetOrders", 24, 36);
- 1383 /// </remarks>
- 1384 /// <param name="transaction">一个有效的连接事务</param>
- 1385 /// <param name="spName">存储过程名称</param>
- 1386 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1387 /// <returns>返回一个包含结果集的DataSet.</returns>
- 1388 public static XmlReader ExecuteXmlReader(SqlTransaction transaction, string spName, params object[] parameterValues)
- 1389 {
- 1390 if (transaction == null) throw new ArgumentNullException("transaction");
- 1391 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1392 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1393
- 1394 // 如果有参数值
- 1395 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1396 {
- 1397 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1398 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 1399
- 1400 // 给存储过程参数赋值
- 1401 AssignParameterValues(commandParameters, parameterValues);
- 1402
- 1403 // 调用重载方法
- 1404 return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 1405 }
- 1406 else
- 1407 {
- 1408 // 没有参数值
- 1409 return ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
- 1410 }
- 1411 }
- 1412
- 1413 #endregion ExecuteXmlReader 阅读器结束
- 1414
- 1415 #region FillDataset 填充数据集
- 1416 /// <summary>
- 1417 /// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.
- 1418 /// </summary>
- 1419 /// <remarks>
- 1420 /// 示例:
- 1421 /// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
- 1422 /// </remarks>
- 1423 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1424 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1425 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1426 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1427 /// <param name="tableNames">表映射的数据表数组
- 1428 /// 用户定义的表名 (可有是实际的表名.)</param>
- 1429 public static void FillDataset(string connectionString, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
- 1430 {
- 1431 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1432 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1433
- 1434 // 创建并打开数据库连接对象,操作完成释放对象.
- 1435 using (SqlConnection connection = new SqlConnection(connectionString))
- 1436 {
- 1437 connection.Open();
- 1438
- 1439 // 调用指定数据库连接字符串重载方法.
- 1440 FillDataset(connection, commandType, commandText, dataSet, tableNames);
- 1441 }
- 1442 }
- 1443
- 1444 /// <summary>
- 1445 /// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.指定命令参数.
- 1446 /// </summary>
- 1447 /// <remarks>
- 1448 /// 示例:
- 1449 /// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
- 1450 /// </remarks>
- 1451 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1452 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1453 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1454 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1455 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1456 /// <param name="tableNames">表映射的数据表数组
- 1457 /// 用户定义的表名 (可有是实际的表名.)
- 1458 /// </param>
- 1459 public static void FillDataset(string connectionString, CommandType commandType,
- 1460 string commandText, DataSet dataSet, string[] tableNames,
- 1461 params SqlParameter[] commandParameters)
- 1462 {
- 1463 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1464 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1465 // 创建并打开数据库连接对象,操作完成释放对象.
- 1466 using (SqlConnection connection = new SqlConnection(connectionString))
- 1467 {
- 1468 connection.Open();
- 1469
- 1470 // 调用指定数据库连接字符串重载方法.
- 1471 FillDataset(connection, commandType, commandText, dataSet, tableNames, commandParameters);
- 1472 }
- 1473 }
- 1474
- 1475 /// <summary>
- 1476 /// 执行指定数据库连接字符串的命令,映射数据表并填充数据集,指定存储过程参数值.
- 1477 /// </summary>
- 1478 /// <remarks>
- 1479 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1480 ///
- 1481 /// 示例:
- 1482 /// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, 24);
- 1483 /// </remarks>
- 1484 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1485 /// <param name="spName">存储过程名称</param>
- 1486 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1487 /// <param name="tableNames">表映射的数据表数组
- 1488 /// 用户定义的表名 (可有是实际的表名.)
- 1489 /// </param>
- 1490 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1491 public static void FillDataset(string connectionString, string spName,
- 1492 DataSet dataSet, string[] tableNames,
- 1493 params object[] parameterValues)
- 1494 {
- 1495 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1496 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1497 // 创建并打开数据库连接对象,操作完成释放对象.
- 1498 using (SqlConnection connection = new SqlConnection(connectionString))
- 1499 {
- 1500 connection.Open();
- 1501
- 1502 // 调用指定数据库连接字符串重载方法.
- 1503 FillDataset(connection, spName, dataSet, tableNames, parameterValues);
- 1504 }
- 1505 }
- 1506
- 1507 /// <summary>
- 1508 /// 执行指定数据库连接对象的命令,映射数据表并填充数据集.
- 1509 /// </summary>
- 1510 /// <remarks>
- 1511 /// 示例:
- 1512 /// FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
- 1513 /// </remarks>
- 1514 /// <param name="connection">一个有效的数据库连接对象</param>
- 1515 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1516 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1517 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1518 /// <param name="tableNames">表映射的数据表数组
- 1519 /// 用户定义的表名 (可有是实际的表名.)
- 1520 /// </param>
- 1521 public static void FillDataset(SqlConnection connection, CommandType commandType,
- 1522 string commandText, DataSet dataSet, string[] tableNames)
- 1523 {
- 1524 FillDataset(connection, commandType, commandText, dataSet, tableNames, null);
- 1525 }
- 1526
- 1527 /// <summary>
- 1528 /// 执行指定数据库连接对象的命令,映射数据表并填充数据集,指定参数.
- 1529 /// </summary>
- 1530 /// <remarks>
- 1531 /// 示例:
- 1532 /// FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
- 1533 /// </remarks>
- 1534 /// <param name="connection">一个有效的数据库连接对象</param>
- 1535 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1536 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1537 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1538 /// <param name="tableNames">表映射的数据表数组
- 1539 /// 用户定义的表名 (可有是实际的表名.)
- 1540 /// </param>
- 1541 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1542 public static void FillDataset(SqlConnection connection, CommandType commandType,
- 1543 string commandText, DataSet dataSet, string[] tableNames,
- 1544 params SqlParameter[] commandParameters)
- 1545 {
- 1546 FillDataset(connection, null, commandType, commandText, dataSet, tableNames, commandParameters);
- 1547 }
- 1548
- 1549 /// <summary>
- 1550 /// 执行指定数据库连接对象的命令,映射数据表并填充数据集,指定存储过程参数值.
- 1551 /// </summary>
- 1552 /// <remarks>
- 1553 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1554 ///
- 1555 /// 示例:
- 1556 /// FillDataset(conn, "GetOrders", ds, new string[] {"orders"}, 24, 36);
- 1557 /// </remarks>
- 1558 /// <param name="connection">一个有效的数据库连接对象</param>
- 1559 /// <param name="spName">存储过程名称</param>
- 1560 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1561 /// <param name="tableNames">表映射的数据表数组
- 1562 /// 用户定义的表名 (可有是实际的表名.)
- 1563 /// </param>
- 1564 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1565 public static void FillDataset(SqlConnection connection, string spName,
- 1566 DataSet dataSet, string[] tableNames,
- 1567 params object[] parameterValues)
- 1568 {
- 1569 if (connection == null) throw new ArgumentNullException("connection");
- 1570 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1571 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1572
- 1573 // 如果有参数值
- 1574 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1575 {
- 1576 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1577 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1578
- 1579 // 给存储过程参数赋值
- 1580 AssignParameterValues(commandParameters, parameterValues);
- 1581
- 1582 // 调用重载方法
- 1583 FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
- 1584 }
- 1585 else
- 1586 {
- 1587 // 没有参数值
- 1588 FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames);
- 1589 }
- 1590 }
- 1591
- 1592 /// <summary>
- 1593 /// 执行指定数据库事务的命令,映射数据表并填充数据集.
- 1594 /// </summary>
- 1595 /// <remarks>
- 1596 /// 示例:
- 1597 /// FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
- 1598 /// </remarks>
- 1599 /// <param name="transaction">一个有效的连接事务</param>
- 1600 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1601 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1602 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1603 /// <param name="tableNames">表映射的数据表数组
- 1604 /// 用户定义的表名 (可有是实际的表名.)
- 1605 /// </param>
- 1606 public static void FillDataset(SqlTransaction transaction, CommandType commandType,
- 1607 string commandText,
- 1608 DataSet dataSet, string[] tableNames)
- 1609 {
- 1610 FillDataset(transaction, commandType, commandText, dataSet, tableNames, null);
- 1611 }
- 1612
- 1613 /// <summary>
- 1614 /// 执行指定数据库事务的命令,映射数据表并填充数据集,指定参数.
- 1615 /// </summary>
- 1616 /// <remarks>
- 1617 /// 示例:
- 1618 /// FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
- 1619 /// </remarks>
- 1620 /// <param name="transaction">一个有效的连接事务</param>
- 1621 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1622 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1623 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1624 /// <param name="tableNames">表映射的数据表数组
- 1625 /// 用户定义的表名 (可有是实际的表名.)
- 1626 /// </param>
- 1627 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1628 public static void FillDataset(SqlTransaction transaction, CommandType commandType,
- 1629 string commandText, DataSet dataSet, string[] tableNames,
- 1630 params SqlParameter[] commandParameters)
- 1631 {
- 1632 FillDataset(transaction.Connection, transaction, commandType, commandText, dataSet, tableNames, commandParameters);
- 1633 }
- 1634
- 1635 /// <summary>
- 1636 /// 执行指定数据库事务的命令,映射数据表并填充数据集,指定存储过程参数值.
- 1637 /// </summary>
- 1638 /// <remarks>
- 1639 /// 此方法不提供访问存储过程输出参数和返回值参数.
- 1640 ///
- 1641 /// 示例:
- 1642 /// FillDataset(trans, "GetOrders", ds, new string[]{"orders"}, 24, 36);
- 1643 /// </remarks>
- 1644 /// <param name="transaction">一个有效的连接事务</param>
- 1645 /// <param name="spName">存储过程名称</param>
- 1646 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1647 /// <param name="tableNames">表映射的数据表数组
- 1648 /// 用户定义的表名 (可有是实际的表名.)
- 1649 /// </param>
- 1650 /// <param name="parameterValues">分配给存储过程输入参数的对象数组</param>
- 1651 public static void FillDataset(SqlTransaction transaction, string spName,
- 1652 DataSet dataSet, string[] tableNames,
- 1653 params object[] parameterValues)
- 1654 {
- 1655 if (transaction == null) throw new ArgumentNullException("transaction");
- 1656 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1657 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1658 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1659
- 1660 // 如果有参数值
- 1661 if ((parameterValues != null) && (parameterValues.Length > 0))
- 1662 {
- 1663 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1664 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 1665
- 1666 // 给存储过程参数赋值
- 1667 AssignParameterValues(commandParameters, parameterValues);
- 1668
- 1669 // 调用重载方法
- 1670 FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
- 1671 }
- 1672 else
- 1673 {
- 1674 // 没有参数值
- 1675 FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames);
- 1676 }
- 1677 }
- 1678
- 1679 /// <summary>
- 1680 /// [私有方法][内部调用]执行指定数据库连接对象/事务的命令,映射数据表并填充数据集,DataSet/TableNames/SqlParameters.
- 1681 /// </summary>
- 1682 /// <remarks>
- 1683 /// 示例:
- 1684 /// FillDataset(conn, trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new SqlParameter("@prodid", 24));
- 1685 /// </remarks>
- 1686 /// <param name="connection">一个有效的数据库连接对象</param>
- 1687 /// <param name="transaction">一个有效的连接事务</param>
- 1688 /// <param name="commandType">命令类型 (存储过程,命令文本或其它)</param>
- 1689 /// <param name="commandText">存储过程名称或T-SQL语句</param>
- 1690 /// <param name="dataSet">要填充结果集的DataSet实例</param>
- 1691 /// <param name="tableNames">表映射的数据表数组
- 1692 /// 用户定义的表名 (可有是实际的表名.)
- 1693 /// </param>
- 1694 /// <param name="commandParameters">分配给命令的SqlParamter参数数组</param>
- 1695 private static void FillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,
- 1696 string commandText, DataSet dataSet, string[] tableNames,
- 1697 params SqlParameter[] commandParameters)
- 1698 {
- 1699 if (connection == null) throw new ArgumentNullException("connection");
- 1700 if (dataSet == null) throw new ArgumentNullException("dataSet");
- 1701
- 1702 // 创建SqlCommand命令,并进行预处理
- 1703 SqlCommand command = new SqlCommand();
- 1704 bool mustCloseConnection = false;
- 1705 PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
- 1706
- 1707 // 执行命令
- 1708 using (SqlDataAdapter dataAdapter = new SqlDataAdapter(command))
- 1709 {
- 1710
- 1711 // 追加表映射
- 1712 if (tableNames != null && tableNames.Length > 0)
- 1713 {
- 1714 string tableName = "Table";
- 1715 for (int index = 0; index < tableNames.Length; index++)
- 1716 {
- 1717 if (tableNames[index] == null || tableNames[index].Length == 0) throw new ArgumentException("The tableNames parameter must contain a list of tables, a value was provided as null or empty string.", "tableNames");
- 1718 dataAdapter.TableMappings.Add(tableName, tableNames[index]);
- 1719 tableName += (index + 1).ToString();
- 1720 }
- 1721 }
- 1722
- 1723 // 填充数据集使用默认表名称
- 1724 dataAdapter.Fill(dataSet);
- 1725
- 1726 // 清除参数,以便再次使用.
- 1727 command.Parameters.Clear();
- 1728 }
- 1729
- 1730 if (mustCloseConnection)
- 1731 connection.Close();
- 1732 }
- 1733 #endregion
- 1734
- 1735 #region UpdateDataset 更新数据集
- 1736 /// <summary>
- 1737 /// 执行数据集更新到数据库,指定inserted, updated, or deleted命令.
- 1738 /// </summary>
- 1739 /// <remarks>
- 1740 /// 示例:
- 1741 /// UpdateDataset(conn, insertCommand, deleteCommand, updateCommand, dataSet, "Order");
- 1742 /// </remarks>
- 1743 /// <param name="insertCommand">[追加记录]一个有效的T-SQL语句或存储过程</param>
- 1744 /// <param name="deleteCommand">[删除记录]一个有效的T-SQL语句或存储过程</param>
- 1745 /// <param name="updateCommand">[更新记录]一个有效的T-SQL语句或存储过程</param>
- 1746 /// <param name="dataSet">要更新到数据库的DataSet</param>
- 1747 /// <param name="tableName">要更新到数据库的DataTable</param>
- 1748 public static void UpdateDataset(SqlCommand insertCommand, SqlCommand deleteCommand, SqlCommand updateCommand, DataSet dataSet, string tableName)
- 1749 {
- 1750 if (insertCommand == null) throw new ArgumentNullException("insertCommand");
- 1751 if (deleteCommand == null) throw new ArgumentNullException("deleteCommand");
- 1752 if (updateCommand == null) throw new ArgumentNullException("updateCommand");
- 1753 if (tableName == null || tableName.Length == 0) throw new ArgumentNullException("tableName");
- 1754
- 1755 // 创建SqlDataAdapter,当操作完成后释放.
- 1756 using (SqlDataAdapter dataAdapter = new SqlDataAdapter())
- 1757 {
- 1758 // 设置数据适配器命令
- 1759 dataAdapter.UpdateCommand = updateCommand;
- 1760 dataAdapter.InsertCommand = insertCommand;
- 1761 dataAdapter.DeleteCommand = deleteCommand;
- 1762
- 1763 // 更新数据集改变到数据库
- 1764 dataAdapter.Update(dataSet, tableName);
- 1765
- 1766 // 提交所有改变到数据集.
- 1767 dataSet.AcceptChanges();
- 1768 }
- 1769 }
- 1770 #endregion
- 1771
- 1772 #region CreateCommand 创建一条SqlCommand命令
- 1773 /// <summary>
- 1774 /// 创建SqlCommand命令,指定数据库连接对象,存储过程名和参数.
- 1775 /// </summary>
- 1776 /// <remarks>
- 1777 /// 示例:
- 1778 /// SqlCommand command = CreateCommand(conn, "AddCustomer", "CustomerID", "CustomerName");
- 1779 /// </remarks>
- 1780 /// <param name="connection">一个有效的数据库连接对象</param>
- 1781 /// <param name="spName">存储过程名称</param>
- 1782 /// <param name="sourceColumns">源表的列名称数组</param>
- 1783 /// <returns>返回SqlCommand命令</returns>
- 1784 public static SqlCommand CreateCommand(SqlConnection connection, string spName, params string[] sourceColumns)
- 1785 {
- 1786 if (connection == null) throw new ArgumentNullException("connection");
- 1787 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1788
- 1789 // 创建命令
- 1790 SqlCommand cmd = new SqlCommand(spName, connection);
- 1791 cmd.CommandType = CommandType.StoredProcedure;
- 1792
- 1793 // 如果有参数值
- 1794 if ((sourceColumns != null) && (sourceColumns.Length > 0))
- 1795 {
- 1796 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1797 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1798
- 1799 // 将源表的列到映射到DataSet命令中.
- 1800 for (int index = 0; index < sourceColumns.Length; index++)
- 1801 commandParameters[index].SourceColumn = sourceColumns[index];
- 1802
- 1803 // Attach the discovered parameters to the SqlCommand object
- 1804 AttachParameters(cmd, commandParameters);
- 1805 }
- 1806
- 1807 return cmd;
- 1808 }
- 1809 #endregion
- 1810
- 1811 #region ExecuteNonQueryTypedParams 类型化参数(DataRow)
- 1812 /// <summary>
- 1813 /// 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回受影响的行数.
- 1814 /// </summary>
- 1815 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1816 /// <param name="spName">存储过程名称</param>
- 1817 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1818 /// <returns>返回影响的行数</returns>
- 1819 public static int ExecuteNonQueryTypedParams(String connectionString, String spName, DataRow dataRow)
- 1820 {
- 1821 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1822 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1823
- 1824 // 如果row有值,存储过程必须初始化.
- 1825 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1826 {
- 1827 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1828 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 1829
- 1830 // 分配参数值
- 1831 AssignParameterValues(commandParameters, dataRow);
- 1832
- 1833 return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 1834 }
- 1835 else
- 1836 {
- 1837 return SqlHelper.ExecuteNonQuery(connectionString, CommandType.StoredProcedure, spName);
- 1838 }
- 1839 }
- 1840
- 1841 /// <summary>
- 1842 /// 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回受影响的行数.
- 1843 /// </summary>
- 1844 /// <param name="connection">一个有效的数据库连接对象</param>
- 1845 /// <param name="spName">存储过程名称</param>
- 1846 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1847 /// <returns>返回影响的行数</returns>
- 1848 public static int ExecuteNonQueryTypedParams(SqlConnection connection, String spName, DataRow dataRow)
- 1849 {
- 1850 if (connection == null) throw new ArgumentNullException("connection");
- 1851 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1852
- 1853 // 如果row有值,存储过程必须初始化.
- 1854 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1855 {
- 1856 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1857 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1858
- 1859 // 分配参数值
- 1860 AssignParameterValues(commandParameters, dataRow);
- 1861
- 1862 return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName, commandParameters);
- 1863 }
- 1864 else
- 1865 {
- 1866 return SqlHelper.ExecuteNonQuery(connection, CommandType.StoredProcedure, spName);
- 1867 }
- 1868 }
- 1869
- 1870 /// <summary>
- 1871 /// 执行指定连接数据库事物的存储过程,使用DataRow做为参数值,返回受影响的行数.
- 1872 /// </summary>
- 1873 /// <param name="transaction">一个有效的连接事务 object</param>
- 1874 /// <param name="spName">存储过程名称</param>
- 1875 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1876 /// <returns>返回影响的行数</returns>
- 1877 public static int ExecuteNonQueryTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
- 1878 {
- 1879 if (transaction == null) throw new ArgumentNullException("transaction");
- 1880 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1881 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1882
- 1883 // Sf the row has values, the store procedure parameters must be initialized
- 1884 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1885 {
- 1886 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1887 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 1888
- 1889 // 分配参数值
- 1890 AssignParameterValues(commandParameters, dataRow);
- 1891
- 1892 return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 1893 }
- 1894 else
- 1895 {
- 1896 return SqlHelper.ExecuteNonQuery(transaction, CommandType.StoredProcedure, spName);
- 1897 }
- 1898 }
- 1899 #endregion
- 1900
- 1901 #region ExecuteDatasetTypedParams 类型化参数(DataRow)
- 1902 /// <summary>
- 1903 /// 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataSet.
- 1904 /// </summary>
- 1905 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1906 /// <param name="spName">存储过程名称</param>
- 1907 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1908 /// <returns>返回一个包含结果集的DataSet.</returns>
- 1909 public static DataSet ExecuteDatasetTypedParams(string connectionString, String spName, DataRow dataRow)
- 1910 {
- 1911 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 1912 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1913
- 1914 //如果row有值,存储过程必须初始化.
- 1915 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1916 {
- 1917 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1918 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 1919
- 1920 // 分配参数值
- 1921 AssignParameterValues(commandParameters, dataRow);
- 1922
- 1923 return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 1924 }
- 1925 else
- 1926 {
- 1927 return SqlHelper.ExecuteDataset(connectionString, CommandType.StoredProcedure, spName);
- 1928 }
- 1929 }
- 1930
- 1931 /// <summary>
- 1932 /// 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回DataSet.
- 1933 /// </summary>
- 1934 /// <param name="connection">一个有效的数据库连接对象</param>
- 1935 /// <param name="spName">存储过程名称</param>
- 1936 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1937 /// <returns>返回一个包含结果集的DataSet.</returns>
- 1938 ///
- 1939 public static DataSet ExecuteDatasetTypedParams(SqlConnection connection, String spName, DataRow dataRow)
- 1940 {
- 1941 if (connection == null) throw new ArgumentNullException("connection");
- 1942 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1943
- 1944 // 如果row有值,存储过程必须初始化.
- 1945 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1946 {
- 1947 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1948 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 1949
- 1950 // 分配参数值
- 1951 AssignParameterValues(commandParameters, dataRow);
- 1952
- 1953 return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName, commandParameters);
- 1954 }
- 1955 else
- 1956 {
- 1957 return SqlHelper.ExecuteDataset(connection, CommandType.StoredProcedure, spName);
- 1958 }
- 1959 }
- 1960
- 1961 /// <summary>
- 1962 /// 执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回DataSet.
- 1963 /// </summary>
- 1964 /// <param name="transaction">一个有效的连接事务 object</param>
- 1965 /// <param name="spName">存储过程名称</param>
- 1966 /// <param name="dataRow">使用DataRow作为参数值</param>
- 1967 /// <returns>返回一个包含结果集的DataSet.</returns>
- 1968 public static DataSet ExecuteDatasetTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
- 1969 {
- 1970 if (transaction == null) throw new ArgumentNullException("transaction");
- 1971 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 1972 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 1973
- 1974 // 如果row有值,存储过程必须初始化.
- 1975 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 1976 {
- 1977 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 1978 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 1979
- 1980 // 分配参数值
- 1981 AssignParameterValues(commandParameters, dataRow);
- 1982
- 1983 return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 1984 }
- 1985 else
- 1986 {
- 1987 return SqlHelper.ExecuteDataset(transaction, CommandType.StoredProcedure, spName);
- 1988 }
- 1989 }
- 1990
- 1991 #endregion
- 1992
- 1993 #region ExecuteReaderTypedParams 类型化参数(DataRow)
- 1994 /// <summary>
- 1995 /// 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回DataReader.
- 1996 /// </summary>
- 1997 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 1998 /// <param name="spName">存储过程名称</param>
- 1999 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2000 /// <returns>返回包含结果集的SqlDataReader</returns>
- 2001 public static SqlDataReader ExecuteReaderTypedParams(String connectionString, String spName, DataRow dataRow)
- 2002 {
- 2003 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 2004 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2005
- 2006 // 如果row有值,存储过程必须初始化.
- 2007 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2008 {
- 2009 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2010 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 2011
- 2012 // 分配参数值
- 2013 AssignParameterValues(commandParameters, dataRow);
- 2014
- 2015 return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 2016 }
- 2017 else
- 2018 {
- 2019 return SqlHelper.ExecuteReader(connectionString, CommandType.StoredProcedure, spName);
- 2020 }
- 2021 }
- 2022
- 2023
- 2024 /// <summary>
- 2025 /// 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回DataReader.
- 2026 /// </summary>
- 2027 /// <param name="connection">一个有效的数据库连接对象</param>
- 2028 /// <param name="spName">存储过程名称</param>
- 2029 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2030 /// <returns>返回包含结果集的SqlDataReader</returns>
- 2031 public static SqlDataReader ExecuteReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
- 2032 {
- 2033 if (connection == null) throw new ArgumentNullException("connection");
- 2034 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2035
- 2036 // 如果row有值,存储过程必须初始化.
- 2037 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2038 {
- 2039 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2040 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 2041
- 2042 // 分配参数值
- 2043 AssignParameterValues(commandParameters, dataRow);
- 2044
- 2045 return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName, commandParameters);
- 2046 }
- 2047 else
- 2048 {
- 2049 return SqlHelper.ExecuteReader(connection, CommandType.StoredProcedure, spName);
- 2050 }
- 2051 }
- 2052
- 2053 /// <summary>
- 2054 /// 执行指定连接数据库事物的存储过程,使用DataRow做为参数值,返回DataReader.
- 2055 /// </summary>
- 2056 /// <param name="transaction">一个有效的连接事务 object</param>
- 2057 /// <param name="spName">存储过程名称</param>
- 2058 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2059 /// <returns>返回包含结果集的SqlDataReader</returns>
- 2060 public static SqlDataReader ExecuteReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
- 2061 {
- 2062 if (transaction == null) throw new ArgumentNullException("transaction");
- 2063 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 2064 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2065
- 2066 // 如果row有值,存储过程必须初始化.
- 2067 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2068 {
- 2069 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2070 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 2071
- 2072 // 分配参数值
- 2073 AssignParameterValues(commandParameters, dataRow);
- 2074
- 2075 return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 2076 }
- 2077 else
- 2078 {
- 2079 return SqlHelper.ExecuteReader(transaction, CommandType.StoredProcedure, spName);
- 2080 }
- 2081 }
- 2082 #endregion
- 2083
- 2084 #region ExecuteScalarTypedParams 类型化参数(DataRow)
- 2085 /// <summary>
- 2086 /// 执行指定连接数据库连接字符串的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.
- 2087 /// </summary>
- 2088 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 2089 /// <param name="spName">存储过程名称</param>
- 2090 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2091 /// <returns>返回结果集中的第一行第一列</returns>
- 2092 public static object ExecuteScalarTypedParams(String connectionString, String spName, DataRow dataRow)
- 2093 {
- 2094 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 2095 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2096
- 2097 // 如果row有值,存储过程必须初始化.
- 2098 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2099 {
- 2100 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2101 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connectionString, spName);
- 2102
- 2103 // 分配参数值
- 2104 AssignParameterValues(commandParameters, dataRow);
- 2105
- 2106 return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName, commandParameters);
- 2107 }
- 2108 else
- 2109 {
- 2110 return SqlHelper.ExecuteScalar(connectionString, CommandType.StoredProcedure, spName);
- 2111 }
- 2112 }
- 2113
- 2114 /// <summary>
- 2115 /// 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.
- 2116 /// </summary>
- 2117 /// <param name="connection">一个有效的数据库连接对象</param>
- 2118 /// <param name="spName">存储过程名称</param>
- 2119 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2120 /// <returns>返回结果集中的第一行第一列</returns>
- 2121 public static object ExecuteScalarTypedParams(SqlConnection connection, String spName, DataRow dataRow)
- 2122 {
- 2123 if (connection == null) throw new ArgumentNullException("connection");
- 2124 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2125
- 2126 // 如果row有值,存储过程必须初始化.
- 2127 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2128 {
- 2129 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2130 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 2131
- 2132 // 分配参数值
- 2133 AssignParameterValues(commandParameters, dataRow);
- 2134
- 2135 return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName, commandParameters);
- 2136 }
- 2137 else
- 2138 {
- 2139 return SqlHelper.ExecuteScalar(connection, CommandType.StoredProcedure, spName);
- 2140 }
- 2141 }
- 2142
- 2143 /// <summary>
- 2144 /// 执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回结果集中的第一行第一列.
- 2145 /// </summary>
- 2146 /// <param name="transaction">一个有效的连接事务 object</param>
- 2147 /// <param name="spName">存储过程名称</param>
- 2148 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2149 /// <returns>返回结果集中的第一行第一列</returns>
- 2150 public static object ExecuteScalarTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
- 2151 {
- 2152 if (transaction == null) throw new ArgumentNullException("transaction");
- 2153 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 2154 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2155
- 2156 // 如果row有值,存储过程必须初始化.
- 2157 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2158 {
- 2159 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2160 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 2161
- 2162 // 分配参数值
- 2163 AssignParameterValues(commandParameters, dataRow);
- 2164
- 2165 return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 2166 }
- 2167 else
- 2168 {
- 2169 return SqlHelper.ExecuteScalar(transaction, CommandType.StoredProcedure, spName);
- 2170 }
- 2171 }
- 2172 #endregion
- 2173
- 2174 #region ExecuteXmlReaderTypedParams 类型化参数(DataRow)
- 2175 /// <summary>
- 2176 /// 执行指定连接数据库连接对象的存储过程,使用DataRow做为参数值,返回XmlReader类型的结果集.
- 2177 /// </summary>
- 2178 /// <param name="connection">一个有效的数据库连接对象</param>
- 2179 /// <param name="spName">存储过程名称</param>
- 2180 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2181 /// <returns>返回XmlReader结果集对象.</returns>
- 2182 public static XmlReader ExecuteXmlReaderTypedParams(SqlConnection connection, String spName, DataRow dataRow)
- 2183 {
- 2184 if (connection == null) throw new ArgumentNullException("connection");
- 2185 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2186
- 2187 // 如果row有值,存储过程必须初始化.
- 2188 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2189 {
- 2190 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2191 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(connection, spName);
- 2192
- 2193 // 分配参数值
- 2194 AssignParameterValues(commandParameters, dataRow);
- 2195
- 2196 return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName, commandParameters);
- 2197 }
- 2198 else
- 2199 {
- 2200 return SqlHelper.ExecuteXmlReader(connection, CommandType.StoredProcedure, spName);
- 2201 }
- 2202 }
- 2203
- 2204 /// <summary>
- 2205 /// 执行指定连接数据库事务的存储过程,使用DataRow做为参数值,返回XmlReader类型的结果集.
- 2206 /// </summary>
- 2207 /// <param name="transaction">一个有效的连接事务 object</param>
- 2208 /// <param name="spName">存储过程名称</param>
- 2209 /// <param name="dataRow">使用DataRow作为参数值</param>
- 2210 /// <returns>返回XmlReader结果集对象.</returns>
- 2211 public static XmlReader ExecuteXmlReaderTypedParams(SqlTransaction transaction, String spName, DataRow dataRow)
- 2212 {
- 2213 if (transaction == null) throw new ArgumentNullException("transaction");
- 2214 if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
- 2215 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2216
- 2217 // 如果row有值,存储过程必须初始化.
- 2218 if (dataRow != null && dataRow.ItemArray.Length > 0)
- 2219 {
- 2220 // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
- 2221 SqlParameter[] commandParameters = SqlHelperParameterCache.GetSpParameterSet(transaction.Connection, spName);
- 2222
- 2223 // 分配参数值
- 2224 AssignParameterValues(commandParameters, dataRow);
- 2225
- 2226 return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName, commandParameters);
- 2227 }
- 2228 else
- 2229 {
- 2230 return SqlHelper.ExecuteXmlReader(transaction, CommandType.StoredProcedure, spName);
- 2231 }
- 2232 }
- 2233 #endregion
- 2234
- 2235 }
- 2236
- 2237 /// <summary>
- 2238 /// SqlHelperParameterCache提供缓存存储过程参数,并能够在运行时从存储过程中探索参数.
- 2239 /// </summary>
- 2240 public sealed class SqlHelperParameterCache
- 2241 {
- 2242 #region 私有方法,字段,构造函数
- 2243 // 私有构造函数,妨止类被实例化.
- 2244 private SqlHelperParameterCache() { }
- 2245
- 2246 // 这个方法要注意
- 2247 private static Hashtable paramCache = Hashtable.Synchronized(new Hashtable());
- 2248
- 2249 /// <summary>
- 2250 /// 探索运行时的存储过程,返回SqlParameter参数数组.
- 2251 /// 初始化参数值为 DBNull.Value.
- 2252 /// </summary>
- 2253 /// <param name="connection">一个有效的数据库连接</param>
- 2254 /// <param name="spName">存储过程名称</param>
- 2255 /// <param name="includeReturnValueParameter">是否包含返回值参数</param>
- 2256 /// <returns>返回SqlParameter参数数组</returns>
- 2257 private static SqlParameter[] DiscoverSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
- 2258 {
- 2259 if (connection == null) throw new ArgumentNullException("connection");
- 2260 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2261
- 2262 SqlCommand cmd = new SqlCommand(spName, connection);
- 2263 cmd.CommandType = CommandType.StoredProcedure;
- 2264
- 2265 connection.Open();
- 2266 // 检索cmd指定的存储过程的参数信息,并填充到cmd的Parameters参数集中.
- 2267 SqlCommandBuilder.DeriveParameters(cmd);
- 2268 connection.Close();
- 2269 // 如果不包含返回值参数,将参数集中的每一个参数删除.
- 2270 if (!includeReturnValueParameter)
- 2271 {
- 2272 cmd.Parameters.RemoveAt(0);
- 2273 }
- 2274
- 2275 // 创建参数数组
- 2276 SqlParameter[] discoveredParameters = new SqlParameter[cmd.Parameters.Count];
- 2277 // 将cmd的Parameters参数集复制到discoveredParameters数组.
- 2278 cmd.Parameters.CopyTo(discoveredParameters, 0);
- 2279
- 2280 // 初始化参数值为 DBNull.Value.
- 2281 foreach (SqlParameter discoveredParameter in discoveredParameters)
- 2282 {
- 2283 discoveredParameter.Value = DBNull.Value;
- 2284 }
- 2285 return discoveredParameters;
- 2286 }
- 2287
- 2288 /// <summary>
- 2289 /// SqlParameter参数数组的深层拷贝.
- 2290 /// </summary>
- 2291 /// <param name="originalParameters">原始参数数组</param>
- 2292 /// <returns>返回一个同样的参数数组</returns>
- 2293 private static SqlParameter[] CloneParameters(SqlParameter[] originalParameters)
- 2294 {
- 2295 SqlParameter[] clonedParameters = new SqlParameter[originalParameters.Length];
- 2296
- 2297 for (int i = 0, j = originalParameters.Length; i < j; i++)
- 2298 {
- 2299 clonedParameters[i] = (SqlParameter)((ICloneable)originalParameters[i]).Clone();
- 2300 }
- 2301
- 2302 return clonedParameters;
- 2303 }
- 2304
- 2305 #endregion 私有方法,字段,构造函数结束
- 2306
- 2307 #region 缓存方法
- 2308
- 2309 /// <summary>
- 2310 /// 追加参数数组到缓存.
- 2311 /// </summary>
- 2312 /// <param name="connectionString">一个有效的数据库连接字符串</param>
- 2313 /// <param name="commandText">存储过程名或SQL语句</param>
- 2314 /// <param name="commandParameters">要缓存的参数数组</param>
- 2315 public static void CacheParameterSet(string connectionString, string commandText, params SqlParameter[] commandParameters)
- 2316 {
- 2317 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 2318 if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
- 2319
- 2320 string hashKey = connectionString + ":" + commandText;
- 2321
- 2322 paramCache[hashKey] = commandParameters;
- 2323 }
- 2324
- 2325 /// <summary>
- 2326 /// 从缓存中获取参数数组.
- 2327 /// </summary>
- 2328 /// <param name="connectionString">一个有效的数据库连接字符</param>
- 2329 /// <param name="commandText">存储过程名或SQL语句</param>
- 2330 /// <returns>参数数组</returns>
- 2331 public static SqlParameter[] GetCachedParameterSet(string connectionString, string commandText)
- 2332 {
- 2333 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 2334 if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
- 2335
- 2336 string hashKey = connectionString + ":" + commandText;
- 2337
- 2338 SqlParameter[] cachedParameters = paramCache[hashKey] as SqlParameter[];
- 2339 if (cachedParameters == null)
- 2340 {
- 2341 return null;
- 2342 }
- 2343 else
- 2344 {
- 2345 return CloneParameters(cachedParameters);
- 2346 }
- 2347 }
- 2348
- 2349 #endregion 缓存方法结束
- 2350
- 2351 #region 检索指定的存储过程的参数集
- 2352
- 2353 /// <summary>
- 2354 /// 返回指定的存储过程的参数集
- 2355 /// </summary>
- 2356 /// <remarks>
- 2357 /// 这个方法将查询数据库,并将信息存储到缓存.
- 2358 /// </remarks>
- 2359 /// <param name="connectionString">一个有效的数据库连接字符</param>
- 2360 /// <param name="spName">存储过程名</param>
- 2361 /// <returns>返回SqlParameter参数数组</returns>
- 2362 public static SqlParameter[] GetSpParameterSet(string connectionString, string spName)
- 2363 {
- 2364 return GetSpParameterSet(connectionString, spName, false);
- 2365 }
- 2366
- 2367 /// <summary>
- 2368 /// 返回指定的存储过程的参数集
- 2369 /// </summary>
- 2370 /// <remarks>
- 2371 /// 这个方法将查询数据库,并将信息存储到缓存.
- 2372 /// </remarks>
- 2373 /// <param name="connectionString">一个有效的数据库连接字符.</param>
- 2374 /// <param name="spName">存储过程名</param>
- 2375 /// <param name="includeReturnValueParameter">是否包含返回值参数</param>
- 2376 /// <returns>返回SqlParameter参数数组</returns>
- 2377 public static SqlParameter[] GetSpParameterSet(string connectionString, string spName, bool includeReturnValueParameter)
- 2378 {
- 2379 if (connectionString == null || connectionString.Length == 0) throw new ArgumentNullException("connectionString");
- 2380 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2381
- 2382 using (SqlConnection connection = new SqlConnection(connectionString))
- 2383 {
- 2384 return GetSpParameterSetInternal(connection, spName, includeReturnValueParameter);
- 2385 }
- 2386 }
- 2387
- 2388 /// <summary>
- 2389 /// [内部]返回指定的存储过程的参数集(使用连接对象).
- 2390 /// </summary>
- 2391 /// <remarks>
- 2392 /// 这个方法将查询数据库,并将信息存储到缓存.
- 2393 /// </remarks>
- 2394 /// <param name="connection">一个有效的数据库连接字符</param>
- 2395 /// <param name="spName">存储过程名</param>
- 2396 /// <returns>返回SqlParameter参数数组</returns>
- 2397 internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName)
- 2398 {
- 2399 return GetSpParameterSet(connection, spName, false);
- 2400 }
- 2401
- 2402 /// <summary>
- 2403 /// [内部]返回指定的存储过程的参数集(使用连接对象)
- 2404 /// </summary>
- 2405 /// <remarks>
- 2406 /// 这个方法将查询数据库,并将信息存储到缓存.
- 2407 /// </remarks>
- 2408 /// <param name="connection">一个有效的数据库连接对象</param>
- 2409 /// <param name="spName">存储过程名</param>
- 2410 /// <param name="includeReturnValueParameter">
- 2411 /// 是否包含返回值参数
- 2412 /// </param>
- 2413 /// <returns>返回SqlParameter参数数组</returns>
- 2414 internal static SqlParameter[] GetSpParameterSet(SqlConnection connection, string spName, bool includeReturnValueParameter)
- 2415 {
- 2416 if (connection == null) throw new ArgumentNullException("connection");
- 2417 using (SqlConnection clonedConnection = (SqlConnection)((ICloneable)connection).Clone())
- 2418 {
- 2419 return GetSpParameterSetInternal(clonedConnection, spName, includeReturnValueParameter);
- 2420 }
- 2421 }
- 2422
- 2423 /// <summary>
- 2424 /// [私有]返回指定的存储过程的参数集(使用连接对象)
- 2425 /// </summary>
- 2426 /// <param name="connection">一个有效的数据库连接对象</param>
- 2427 /// <param name="spName">存储过程名</param>
- 2428 /// <param name="includeReturnValueParameter">是否包含返回值参数</param>
- 2429 /// <returns>返回SqlParameter参数数组</returns>
- 2430 private static SqlParameter[] GetSpParameterSetInternal(SqlConnection connection, string spName, bool includeReturnValueParameter)
- 2431 {
- 2432 if (connection == null) throw new ArgumentNullException("connection");
- 2433 if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
- 2434
- 2435 string hashKey = connection.ConnectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
- 2436
- 2437 SqlParameter[] cachedParameters;
- 2438
- 2439 cachedParameters = paramCache[hashKey] as SqlParameter[];
- 2440 if (cachedParameters == null)
- 2441 {
- 2442 SqlParameter[] spParameters = DiscoverSpParameterSet(connection, spName, includeReturnValueParameter);
- 2443 paramCache[hashKey] = spParameters;
- 2444 cachedParameters = spParameters;
- 2445 }
- 2446
- 2447 return CloneParameters(cachedParameters);
- 2448 }
- 2449
- 2450 #endregion 参数集检索结束
- 2451
- 2452 }
- 2453 }
- 2454
- 2455 如果要获取连接数据连接对象或字符串的话,先要修改SQLHelper类中GetConnSting() 方法中的ConfigurationManager.ConnectionStrings["ConStr"].ConnectionString;才能调用。
- 2456
- 2457
- 2458
- 2459
- 2460
- 2461
- 2462
- 2463
- 2464
- 2465
- 2466
- 2467
- 2468
- 2469
- 2470
复制代码
|
|