/// <summary> /// 找出 <paramref name="command"/> 脚本中定义的参数列表,并将 <paramref name="parameterValues"/> 作为参数值分配给该参数列表。 /// </summary> /// <param name="database">表示一个 <see cref="Microsoft.Practices.EnterpriseLibrary.Data.Database"/> 对象。</param> /// <param name="command">用于查找参数列表的 <see cref="DbCommand"/> 对象。</param> /// <param name="parameterValues">用于作为参数值分配给 <paramref name="command"/> 参数列表的值集合。</param> public static void AssignParameters(Database database, DbCommand command, params object[] parameterValues) { if (command.CommandType == CommandType.StoredProcedure) { database.AssignParameters(command, parameterValues); return; } DiscoverParameters(database, command); if (command.Parameters.Count != parameterValues.Length) { throw new InvalidOperationException("command 对象中的参数集合元素数量与 parameterValues 元素数量不一致。"); } for (int i = 0; i < parameterValues.Length; i++) { IDataParameter parameter = command.Parameters[i]; string parameterName = database.BuildParameterName(parameter.ParameterName); command.Parameters[parameterName].Value = parameterValues[i] ?? DBNull.Value; } }
/// <summary> /// 执行存储过程,获得存储过程的返回值[注:必须在目标存储过程中设置return返回值,否则始终返回0] /// </summary> /// <param name="dc">存储过程语句</param> /// <param name="db">操作目标数据库</param> /// <returns></returns> public static int RunProcedureWithResult(DbCommand dc, Database db) { int result = 0; try { PrepareCommand(ref dc, db); db.AddParameter(dc, "ReturnValue", DbType.Int32, ParameterDirection.ReturnValue, string.Empty, DataRowVersion.Default, null); db.ExecuteNonQuery(dc); result = (int)dc.Parameters[db.BuildParameterName("ReturnValue")].Value; } catch (System.Exception e) { throw new Exception(e.Message); } return result; }
/// <summary> /// 根据指明的变量名称,创建一个适用于当前数据库类型(依据当前对象的 <see cref="DbProviderFactory"/> 属性所创建的 <see cref="DbConnection"/>)的变量参数名称。 /// </summary> /// <param name="database">表示当前 <see cref="Microsoft.Practices.EnterpriseLibrary.Data.Database"/> 对象。</param> /// <param name="name">指明的用于包装变量参数名称。</param> /// <returns>一个表示可用于表示当前数据库类型(依据当前对象的 <see cref="DbProviderFactory"/> 属性所创建的 <see cref="DbConnection"/>)的变量参数名称。</returns> public static string BuildParameterName(Database database, string name) { return database.BuildParameterName(name); }