using System;
using System.Data;
using System.Xml;
using System.Data.Common;
using System.Collections;
using System.Collections.Generic;
using CB.Common;
using CB.Config;
using CB.Interface;
namespace CB.Data
{
///
/// 数据库操作方法类
///
public partial class DbHelper
{
#region 私有变量
///
/// 数据库连接字符串
///
//protected static string m_connectionstring = null;
///
/// DbProviderFactory实例
///
//private static DbProviderFactory m_factory = null;
///
/// Discuz!NT数据接口
///
//private static IDbProvider m_provider = null;
///
/// 查询次数统计
///
private static int m_querycount = 0;
///
/// Parameters缓存哈希表
///
private static Hashtable m_paramcache = Hashtable.Synchronized(new Hashtable());
private static object lockHelper = new object();
#endregion
#region 属性
///
/// 查询次数统计
///
public static int QueryCount
{
get { return m_querycount; }
set { m_querycount = value; }
}
///
/// 数据库连接字符串
///
public static string ConnectionString(string interfaceId)
{
try
{
return DataProviderConfig.GetConfig(interfaceId).ConnectStringName;
}
catch
{
throw new Exception("未找到:[" + interfaceId + "]接口连接字符串" + DataProviderConfig.GetConfig(interfaceId).DbProviderName);
}
}
///
/// IDbProvider接口
///
public static IDbProvider Provider(string interfaceId)
{
try
{
return (IDbProvider)Activator.CreateInstance(Type.GetType(DataProviderConfig.GetConfig(interfaceId).DbProviderName, false, true));
}
catch
{
throw new Exception("未找到此类[" + interfaceId + "],无法实例化:" + DataProviderConfig.GetConfig(interfaceId).DbProviderName);
}
}
///
/// DbFactory实例
///
public static DbProviderFactory Factory(string interfaceId)
{
return Provider(interfaceId).Instance();
}
///
/// 刷新数据库提供者
///
//public static void ResetDbProvider()
//{
// DatabaseProvider.ResetDbProvider();
// m_connectionstring = null;
// m_factory = null;
// m_provider = null;
//}
#endregion
#region 私有方法
///
/// 将DbParameter参数数组(参数值)分配给DbCommand命令.
/// 这个方法将给任何一个参数分配DBNull.Value;
/// 该操作将阻止默认值的使用.
///
/// 命令名
/// DbParameters数组
private static void AttachParameters(DbCommand command, DbParameter[] commandParameters)
{
if (command == null) throw new ArgumentNullException("command");
if (commandParameters != null)
{
foreach (DbParameter p in commandParameters)
{
if (p != null)
{
// 检查未分配值的输出参数,将其分配以DBNull.Value.
if ((p.Direction == ParameterDirection.InputOutput || p.Direction == ParameterDirection.Input) &&
(p.Value == null))
{
p.Value = DBNull.Value;
}
command.Parameters.Add(p);
}
}
}
}
///
/// 将DataRow类型的列值分配到DbParameter参数数组.
///
/// 要分配值的DbParameter参数数组
/// 将要分配给存储过程参数的DataRow
private static void AssignParameterValues(DbParameter[] commandParameters, DataRow dataRow)
{
if ((commandParameters == null) || (dataRow == null))
return;
int i = 0;
// 设置参数值
foreach (DbParameter commandParameter in commandParameters)
{
// 创建参数名称,如果不存在,只抛出一个异常.
if (commandParameter.ParameterName == null ||
commandParameter.ParameterName.Length <= 1)
throw new Exception(
string.Format("请提供参数{0}一个有效的名称{1}.", i, commandParameter.ParameterName));
// 从dataRow的表中获取为参数数组中数组名称的列的索引.
// 如果存在和参数名称相同的列,则将列值赋给当前名称的参数.
if (dataRow.Table.Columns.IndexOf(commandParameter.ParameterName.Substring(1)) != -1)
commandParameter.Value = dataRow[commandParameter.ParameterName.Substring(1)];
i++;
}
}
///
/// 将一个对象数组分配给DbParameter参数数组.
///
/// 要分配值的DbParameter参数数组
/// 将要分配给存储过程参数的对象数组
private static void AssignParameterValues(DbParameter[] commandParameters, object[] parameterValues)
{
if ((commandParameters == null) || (parameterValues == null))
return;
// 确保对象数组个数与参数个数匹配,如果不匹配,抛出一个异常.
if (commandParameters.Length != parameterValues.Length)
throw new ArgumentException("参数值个数与参数不匹配.");
// 给参数赋值
for (int i = 0, j = commandParameters.Length; i < j; i++)
{
// If the current array value derives from IDbDataParameter, then assign its Value property
if (parameterValues[i] is IDbDataParameter)
{
IDbDataParameter paramInstance = (IDbDataParameter)parameterValues[i];
if (paramInstance.Value == null)
commandParameters[i].Value = DBNull.Value;
else
commandParameters[i].Value = paramInstance.Value;
}
else if (parameterValues[i] == null)
commandParameters[i].Value = DBNull.Value;
else
commandParameters[i].Value = parameterValues[i];
}
}
///
/// 预处理用户提供的命令,数据库连接/事务/命令类型/参数
///
/// 要处理的DbCommand
/// 数据库连接
/// 一个有效的事务或者是null值
/// 命令类型 (存储过程,命令文本, 其它.)
/// 存储过程名或都SQL命令文本
/// 和命令相关联的DbParameter参数数组,如果没有参数为'null'
/// true 如果连接是打开的,则为true,其它情况下为false.
private static void PrepareCommand(DbCommand command, DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, out bool mustCloseConnection)
{
if (command == null) throw new ArgumentNullException("command");
if (commandText == null || commandText.Length == 0) throw new ArgumentNullException("commandText");
// If the provided connection is not open, we will open it
if (connection.State != ConnectionState.Open)
{
mustCloseConnection = true;
connection.Open();
}
else
{
mustCloseConnection = false;
}
// 给命令分配一个数据库连接.
command.Connection = connection;
// 设置命令文本(存储过程名或SQL语句)
command.CommandText = commandText;
// 分配事务
if (transaction != null)
{
if (transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
command.Transaction = transaction;
}
// 设置命令类型.
command.CommandType = commandType;
// 分配命令参数
if (commandParameters != null)
AttachParameters(command, commandParameters);
return;
}
///
/// 探索运行时的存储过程,返回DbParameter参数数组.
/// 初始化参数值为 DBNull.Value.
///
/// 一个有效的数据库连接
/// 存储过程名称
/// 是否包含返回值参数
/// 返回DbParameter参数数组
private static DbParameter[] DiscoverSpParameterSet(string interfaceId, DbConnection connection, string spName, bool includeReturnValueParameter)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if (connection.State == ConnectionState.Open)
connection.Close();
connection.ConnectionString = ConnectionString(interfaceId);
connection.Open();
DbCommand cmd = connection.CreateCommand();
cmd.CommandText = spName;
cmd.CommandType = CommandType.StoredProcedure;
// 检索cmd指定的存储过程的参数信息,并填充到cmd的Parameters参数集中.
Provider(interfaceId).DeriveParameters(cmd);
connection.Close();
// 如果不包含返回值参数,将参数集中的每一个参数删除.
if (!includeReturnValueParameter)
cmd.Parameters.RemoveAt(0);
// 创建参数数组
DbParameter[] discoveredParameters = new DbParameter[cmd.Parameters.Count];
// 将cmd的Parameters参数集复制到discoveredParameters数组.
cmd.Parameters.CopyTo(discoveredParameters, 0);
// 初始化参数值为 DBNull.Value.
foreach (DbParameter discoveredParameter in discoveredParameters)
{
discoveredParameter.Value = DBNull.Value;
}
return discoveredParameters;
}
///
/// DbParameter参数数组的深层拷贝.
///
/// 原始参数数组
/// 返回一个同样的参数数组
private static DbParameter[] CloneParameters(DbParameter[] originalParameters)
{
DbParameter[] clonedParameters = new DbParameter[originalParameters.Length];
for (int i = 0, j = originalParameters.Length; i < j; i++)
{
clonedParameters[i] = (DbParameter)((ICloneable)originalParameters[i]).Clone();
}
return clonedParameters;
}
#endregion 私有方法结束
#region ExecuteNonQuery方法
///
/// 执行指定连接字符串,类型的DbCommand.
///
///
/// 示例:
/// int result = ExecuteNonQuery("SELECT * FROM [table123]");
///
/// 存储过程名称或SQL语句
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, string commandText)
{
return ExecuteNonQuery(interfaceId, CommandType.Text, commandText, (DbParameter[])null);
}
///
/// 执行指定连接字符串,类型的DbCommand.
///
///
/// 示例:
/// int result = ExecuteNonQuery("SELECT * FROM [table123]");
///
/// 存储过程名称或SQL语句
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, string commandText)
{
return ExecuteNonQuery(interfaceId, out id, CommandType.Text, commandText, (DbParameter[])null);
}
///
/// 执行指定连接字符串,类型的DbCommand.
///
///
/// 示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本, 其它.)
/// 存储过程名称或SQL语句
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定连接字符串,并返回刚插入的自增ID
///
///
/// 示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本, 其它.)
/// 存储过程名称或SQL语句
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, out id, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定连接字符串,类型的DbCommand.如果没有提供参数,不返回结果.
///
///
/// 示例:
/// int result = ExecuteNonQuery(connString, CommandType.StoredProcedure, "PublishOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本, 其它.)
/// 存储过程名称或SQL语句
/// DbParameter参数数组
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
//connection.Open();
return ExecuteNonQuery(interfaceId, connection, commandType, commandText, commandParameters);
}
}
///
/// 执行指定连接字符串并返回刚插入的自增ID,类型的DbCommand.如果没有提供参数,不返回结果.
///
/// 命令类型 (存储过程,命令文本, 其它.)
/// 存储过程名称或SQL语句
/// DbParameter参数数组
/// 返回命令影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
//connection.Open();
return ExecuteNonQuery(interfaceId, out id, connection, commandType, commandText, commandParameters);
}
}
///
/// 执行指定数据库连接对象的命令
///
///
/// 示例:
/// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, DbConnection connection, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, connection, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接对象的命令并返回自增ID
///
///
/// 示例:
/// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, DbConnection connection, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, out id, connection, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接对象的命令
///
///
/// 示例:
/// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// T存储过程名称或SQL语句
/// SqlParamter参数数组
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
// 创建DbCommand命令,并进行预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行DbCommand命令,并返回结果.
int retval = cmd.ExecuteNonQuery();
// 清除参数,以便再次使用.
cmd.Parameters.Clear();
if (mustCloseConnection)
connection.Close();
return retval;
}
///
/// 执行指定数据库连接对象的命令
///
///
/// 示例:
/// int result = ExecuteNonQuery(conn, CommandType.StoredProcedure, "PublishOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// T存储过程名称或SQL语句
/// SqlParamter参数数组
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
if (Provider(interfaceId).GetLastIdSql().Trim() == "") throw new ArgumentNullException("GetLastIdSql is \"\"");
// 创建DbCommand命令,并进行预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行命令
int retval = cmd.ExecuteNonQuery();
// 清除参数,以便再次使用.
cmd.Parameters.Clear();
cmd.CommandType = CommandType.Text;
cmd.CommandText = Provider(interfaceId).GetLastIdSql();
id = TypeConverter.ObjectToInt(cmd.ExecuteScalar());
m_querycount++;
if (mustCloseConnection)
{
connection.Close();
}
return retval;
}
///
/// 执行指定数据库连接对象的命令,将对象数组的值赋给存储过程参数.
///
///
/// 此方法不提供访问存储过程输出参数和返回值
/// 示例:
/// int result = ExecuteNonQuery(conn, "PublishOrders", 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, DbConnection connection, string spName, params object[] parameterValues)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// 如果有参数值
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 从缓存中加载存储过程参数
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, connection, spName);
// 给存储过程分配参数值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteNonQuery(interfaceId, connection, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteNonQuery(interfaceId, connection, CommandType.StoredProcedure, spName);
}
}
///
/// 执行带事务的DbCommand.
///
///
/// 示例.:
/// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// 返回影响的行数/returns>
public static int ExecuteNonQuery(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// 执行带事务的DbCommand.
///
///
/// 示例.:
/// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "PublishOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// 返回影响的行数/returns>
public static int ExecuteNonQuery(string interfaceId, out int id, DbTransaction transaction, CommandType commandType, string commandText)
{
return ExecuteNonQuery(interfaceId, out id, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// 执行带事务的DbCommand(指定参数).
///
///
/// 示例:
/// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// SqlParamter参数数组
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行
// 执行DbCommand命令,并返回结果.
int retval = cmd.ExecuteNonQuery();
// 清除参数集,以便再次使用.
cmd.Parameters.Clear();
return retval;
}
///
/// 执行带事务的DbCommand(指定参数).
///
///
/// 示例:
/// int result = ExecuteNonQuery(trans, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型(存储过程,命令文本或其它.)
/// 存储过程名称或SQL语句
/// SqlParamter参数数组
/// 返回影响的行数
public static int ExecuteNonQuery(string interfaceId, out int id, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行
int retval = cmd.ExecuteNonQuery();
// 清除参数,以便再次使用.
cmd.Parameters.Clear();
cmd.CommandType = CommandType.Text;
cmd.CommandText = Provider(interfaceId).GetLastIdSql();
id = TypeConverter.ObjectToInt(cmd.ExecuteScalar().ToString());
return retval;
}
///
/// 执行带事务的DbCommand(指定参数值).
///
///
/// 此方法不提供访问存储过程输出参数和返回值
/// 示例:
/// int result = ExecuteNonQuery(conn, trans, "PublishOrders", 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回受影响的行数
public static int ExecuteNonQuery(string interfaceId, DbTransaction transaction, string spName, params object[] parameterValues)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// 如果有参数值
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, transaction.Connection, spName);
// 给存储过程参数赋值
AssignParameterValues(commandParameters, parameterValues);
// 调用重载方法
return ExecuteNonQuery(interfaceId, transaction, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
// 没有参数值
return ExecuteNonQuery(interfaceId, transaction, CommandType.StoredProcedure, spName);
}
}
#endregion ExecuteNonQuery方法结束
#region ExecuteCommandWithSplitter方法
///
/// 运行含有GO命令的多条SQL命令
///
/// SQL命令字符串
/// 分割字符串
public static void ExecuteCommandWithSplitter(string interfaceId, string commandText, string splitter)
{
int startPos = 0;
do
{
int lastPos = commandText.IndexOf(splitter, startPos);
int len = (lastPos > startPos ? lastPos : commandText.Length) - startPos;
string query = commandText.Substring(startPos, len);
if (query.Trim().Length > 0)
{
try
{
ExecuteNonQuery(interfaceId, CommandType.Text, query);
}
catch { ;}
}
if (lastPos == -1)
break;
else
startPos = lastPos + splitter.Length;
} while (startPos < commandText.Length);
}
///
/// 运行含有GO命令的多条SQL命令
///
/// SQL命令字符串
public static void ExecuteCommandWithSplitter(string interfaceId, string commandText)
{
ExecuteCommandWithSplitter(interfaceId, commandText, "\r\nGO\r\n");
}
#endregion ExecuteCommandWithSplitter方法结束
#region ExecuteDataset方法
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset("SELECT * FROM [table1]");
///
/// 存储过程名称或SQL语句
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, string commandText)
{
return ExecuteDataset(interfaceId, CommandType.Text, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, CommandType commandType, string commandText)
{
return ExecuteDataset(interfaceId, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// SqlParamters参数数组
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
// 创建并打开数据库连接对象,操作完成释放对象.
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
// connection.Open();
// 调用指定数据库连接字符串重载方法.
return ExecuteDataset(interfaceId, connection, commandType, commandText, commandParameters);
}
}
///
/// 执行指定数据库连接对象的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbConnection connection, CommandType commandType, string commandText)
{
return ExecuteDataset(interfaceId, connection, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// SqlParamter参数数组
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
// connection.Close();
connection.ConnectionString = ConnectionString(interfaceId);
connection.Open();
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
// 创建DbDataAdapter和DataSet.
using (DbDataAdapter da = Factory(interfaceId).CreateDataAdapter())
{
da.SelectCommand = cmd;
DataSet ds = new DataSet();
// 填充DataSet.
da.Fill(ds);
m_querycount++;
cmd.Parameters.Clear();
if (mustCloseConnection)
connection.Close();
return ds;
}
}
///
/// 执行指定数据库连接对象的命令,指定参数值,返回DataSet.
///
///
/// 此方法不提供访问存储过程输入参数和返回值.
/// 示例.:
/// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbConnection connection, string spName, params object[] parameterValues)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 比缓存中加载存储过程参数
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, connection, spName);
// 给存储过程参数分配值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteDataset(interfaceId, connection, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteDataset(interfaceId, connection, CommandType.StoredProcedure, spName);
}
}
///
/// 执行指定事务的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
///
/// 事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText)
{
return ExecuteDataset(interfaceId, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定事务的命令,指定参数,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// SqlParamter参数数组
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 创建 DataAdapter & DataSet
using (DbDataAdapter da = Factory(interfaceId).CreateDataAdapter())
{
da.SelectCommand = cmd;
DataSet ds = new DataSet();
da.Fill(ds);
cmd.Parameters.Clear();
return ds;
}
}
///
/// 执行指定事务的命令,指定参数值,返回DataSet.
///
///
/// 此方法不提供访问存储过程输入参数和返回值.
/// 示例.:
/// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
///
/// 事务
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回一个包含结果集的DataSet
public static DataSet ExecuteDataset(string interfaceId, DbTransaction transaction, string spName, params object[] parameterValues)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 从缓存中加载存储过程参数
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, transaction.Connection, spName);
// 给存储过程参数分配值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteDataset(interfaceId, transaction, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteDataset(interfaceId, transaction, CommandType.StoredProcedure, spName);
}
}
#endregion ExecuteDataset数据集命令结束
#region ExecuteDataTable方法
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset("SELECT * FROM [table1]");
///
/// 存储过程名称或SQL语句
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, string commandText)
{
return ExecuteDatatable(interfaceId, CommandType.Text, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, CommandType commandType, string commandText)
{
return ExecuteDatatable(interfaceId, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(connString, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// SqlParamters参数数组
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
// 创建并打开数据库连接对象,操作完成释放对象.
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
// connection.Open();
// 调用指定数据库连接字符串重载方法.
return ExecuteDatatable(interfaceId, connection, commandType, commandText, commandParameters);
}
}
///
/// 执行指定数据库连接对象的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbConnection connection, CommandType commandType, string commandText)
{
return ExecuteDatatable(interfaceId, connection, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接对象的命令,指定存储过程参数,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(conn, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// SqlParamter参数数组
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
// connection.Close();
connection.ConnectionString = ConnectionString(interfaceId);
connection.Open();
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
// 创建DbDataAdapter和DataSet.
using (DbDataAdapter da = Factory(interfaceId).CreateDataAdapter())
{
da.SelectCommand = cmd;
DataTable dt = new DataTable();
// 填充DataSet.
da.Fill(dt);
m_querycount++;
cmd.Parameters.Clear();
if (mustCloseConnection)
connection.Close();
return dt;
}
}
///
/// 执行指定数据库连接对象的命令,指定参数值,返回DataSet.
///
///
/// 此方法不提供访问存储过程输入参数和返回值.
/// 示例.:
/// DataSet ds = ExecuteDataset(conn, "GetOrders", 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbConnection connection, string spName, params object[] parameterValues)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 比缓存中加载存储过程参数
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, connection, spName);
// 给存储过程参数分配值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteDatatable(interfaceId, connection, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteDatatable(interfaceId, connection, CommandType.StoredProcedure, spName);
}
}
///
/// 执行指定事务的命令,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders");
///
/// 事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText)
{
return ExecuteDatatable(interfaceId, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定事务的命令,指定参数,返回DataSet.
///
///
/// 示例:
/// DataSet ds = ExecuteDataset(trans, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// SqlParamter参数数组
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// 预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 创建 DataAdapter & DataSet
using (DbDataAdapter da = Factory(interfaceId).CreateDataAdapter())
{
da.SelectCommand = cmd;
DataTable dt = new DataTable();
da.Fill(dt);
cmd.Parameters.Clear();
return dt;
}
}
///
/// 执行指定事务的命令,指定参数值,返回DataSet.
///
///
/// 此方法不提供访问存储过程输入参数和返回值.
/// 示例.:
/// DataSet ds = ExecuteDataset(trans, "GetOrders", 24, 36);
///
/// 事务
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回一个包含结果集的DataSet
public static DataTable ExecuteDatatable(string interfaceId, DbTransaction transaction, string spName, params object[] parameterValues)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 从缓存中加载存储过程参数
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, transaction.Connection, spName);
// 给存储过程参数分配值
AssignParameterValues(commandParameters, parameterValues);
return ExecuteDatatable(interfaceId, transaction, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteDatatable(interfaceId, transaction, CommandType.StoredProcedure, spName);
}
}
#endregion ExecuteDataset数据集命令结束
#region ExecuteReader 数据阅读器
///
/// 枚举,标识数据库连接是由BaseDbHelper提供还是由调用者提供
///
private enum DbConnectionOwnership
{
/// 由BaseDbHelper提供连接
Internal,
/// 由调用者提供连接
External
}
///
/// 执行指定数据库连接对象的数据阅读器.
///
///
/// 如果是BaseDbHelper打开连接,当连接关闭DataReader也将关闭.
/// 如果是调用都打开连接,DataReader由调用都管理.
///
/// 一个有效的数据库连接对象
/// 一个有效的事务,或者为 'null'
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// DbParameters参数数组,如果没有参数则为'null'
/// 标识数据库连接对象是由调用者提供还是由BaseDbHelper提供
/// 返回包含结果集的DbDataReader
private static DbDataReader ExecuteReader(string interfaceId, DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DbParameter[] commandParameters, DbConnectionOwnership connectionOwnership)
{
if (connection == null) throw new ArgumentNullException("connection");
//connection.Close();
connection.ConnectionString = ConnectionString(interfaceId);
connection.Open();
bool mustCloseConnection = false;
// 创建命令
DbCommand cmd = Factory(interfaceId).CreateCommand();
try
{
PrepareCommand(cmd, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 创建数据阅读器
DbDataReader dataReader;
if (connectionOwnership == DbConnectionOwnership.External)
{
dataReader = cmd.ExecuteReader();
}
else
{
dataReader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
}
m_querycount++;
// 清除参数,以便再次使用..
bool canClear = true;
foreach (DbParameter commandParameter in cmd.Parameters)
{
if (commandParameter.Direction != ParameterDirection.Input)
canClear = false;
}
if (canClear)
{
//cmd.Dispose();
cmd.Parameters.Clear();
}
return dataReader;
}
catch
{
if (mustCloseConnection)
connection.Close();
throw;
}
}
///
/// 执行指定数据库连接字符串的数据阅读器.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, CommandType commandType, string commandText)
{
return ExecuteReader(interfaceId, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的数据阅读器,指定参数.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(connString, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// SqlParamter参数数组(new DbParameter("@prodid", 24))
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
DbConnection connection = null;
try
{
connection = Factory(interfaceId).CreateConnection();
connection.ConnectionString = ConnectionString(interfaceId);
//connection.Open();
return ExecuteReader(interfaceId, connection, null, commandType, commandText, commandParameters, DbConnectionOwnership.Internal);
}
catch
{
// If we fail to return the SqlDatReader, we need to close the connection ourselves
if (connection != null) connection.Close();
throw;
}
}
///
/// 执行指定数据库连接字符串的数据阅读器,指定参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
/// 示例:
/// DbDataReader dr = ExecuteReader(connString, "GetOrders", 24, 36);
///
/// 一个有效的数据库连接字符串
/// 存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, string spName, params object[] parameterValues)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteReader(ConnectionString(interfaceId), CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteReader(ConnectionString(interfaceId), CommandType.StoredProcedure, spName);
}
}
///
/// 执行指定数据库连接对象的数据阅读器.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名或SQL语句
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbConnection connection, CommandType commandType, string commandText)
{
return ExecuteReader(interfaceId, connection, commandType, commandText, (DbParameter[])null);
}
///
/// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(conn, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 命令类型 (存储过程,命令文本或其它)
/// SqlParamter参数数组
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
return ExecuteReader(interfaceId, connection, (DbTransaction)null, commandType, commandText, commandParameters, DbConnectionOwnership.External);
}
///
/// [调用者方式]执行指定数据库连接对象的数据阅读器,指定参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
/// 示例:
/// DbDataReader dr = ExecuteReader(conn, "GetOrders", 24, 36);
///
/// 一个有效的数据库连接对象
/// T存储过程名
/// 分配给存储过程输入参数的对象数组
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbConnection connection, string spName, params object[] parameterValues)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
if ((parameterValues != null) && (parameterValues.Length > 0))
{
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, connection, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteReader(interfaceId, connection, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
return ExecuteReader(interfaceId, connection, CommandType.StoredProcedure, spName);
}
}
///
/// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders");
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText)
{
return ExecuteReader(interfaceId, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// [调用者方式]执行指定数据库事务的数据阅读器,指定参数.
///
///
/// 示例:
/// DbDataReader dr = ExecuteReader(trans, CommandType.StoredProcedure, "GetOrders", new DbParameter("@prodid", 24));
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 分配给命令的SqlParamter参数数组
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
return ExecuteReader(interfaceId, transaction.Connection, transaction, commandType, commandText, commandParameters, DbConnectionOwnership.External);
}
///
/// [调用者方式]执行指定数据库事务的数据阅读器,指定参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// DbDataReader dr = ExecuteReader(trans, "GetOrders", 24, 36);
///
/// 一个有效的连接事务
/// 存储过程名称
/// 分配给存储过程输入参数的对象数组
/// 返回包含结果集的DbDataReader
public static DbDataReader ExecuteReader(string interfaceId, DbTransaction transaction, string spName, params object[] parameterValues)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// 如果有参数值
if ((parameterValues != null) && (parameterValues.Length > 0))
{
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, transaction.Connection, spName);
AssignParameterValues(commandParameters, parameterValues);
return ExecuteReader(interfaceId, transaction, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
// 没有参数值
return ExecuteReader(interfaceId, transaction, CommandType.StoredProcedure, spName);
}
}
#endregion ExecuteReader数据阅读器
#region ExecuteScalar 返回结果集中的第一行第一列
///
/// 执行指定数据库连接字符串的命令,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount");
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, CommandType commandType, string commandText)
{
// 执行参数为空的方法
return ExecuteScalar(interfaceId, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接字符串的命令,指定参数,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(connString, CommandType.StoredProcedure, "GetOrderCount", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 分配给命令的SqlParamter参数数组
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
// 创建并打开数据库连接对象,操作完成释放对象.
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
// connection.Open();
// 调用指定数据库连接字符串重载方法.
return ExecuteScalar(interfaceId, connection, commandType, commandText, commandParameters);
}
}
///
/// 执行指定数据库连接对象的命令,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount");
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbConnection connection, CommandType commandType, string commandText)
{
// 执行参数为空的方法
return ExecuteScalar(interfaceId, connection, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库连接对象的命令,指定参数,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(conn, CommandType.StoredProcedure, "GetOrderCount", new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 分配给命令的SqlParamter参数数组
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbConnection connection, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
//connection.Close();
connection.ConnectionString = ConnectionString(interfaceId);
connection.Open();
// 创建DbCommand命令,并进行预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, connection, (DbTransaction)null, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行DbCommand命令,并返回结果.
object retval = cmd.ExecuteScalar();
// 清除参数,以便再次使用.
cmd.Parameters.Clear();
if (mustCloseConnection)
connection.Close();
return retval;
}
///
/// 执行指定数据库连接对象的命令,指定参数值,返回结果集中的第一行第一列.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(conn, "GetOrderCount", 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名称
/// 分配给存储过程输入参数的对象数组
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbConnection connection, string spName, params object[] parameterValues)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// 如果有参数值
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, connection, spName);
// 给存储过程参数赋值
AssignParameterValues(commandParameters, parameterValues);
// 调用重载方法
return ExecuteScalar(interfaceId, connection, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
// 没有参数值
return ExecuteScalar(interfaceId, connection, CommandType.StoredProcedure, spName);
}
}
///
/// 执行指定数据库事务的命令,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount");
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText)
{
// 执行参数为空的方法
return ExecuteScalar(interfaceId, transaction, commandType, commandText, (DbParameter[])null);
}
///
/// 执行指定数据库事务的命令,指定参数,返回结果集中的第一行第一列.
///
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(trans, CommandType.StoredProcedure, "GetOrderCount", new DbParameter("@prodid", 24));
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 分配给命令的SqlParamter参数数组
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// 创建DbCommand命令,并进行预处理
DbCommand cmd = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(cmd, transaction.Connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行DbCommand命令,并返回结果.
object retval = cmd.ExecuteScalar();
m_querycount++;
// 清除参数,以便再次使用.
cmd.Parameters.Clear();
return retval;
}
///
/// 执行指定数据库事务的命令,指定参数值,返回结果集中的第一行第一列.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// int orderCount = (int)ExecuteScalar(trans, "GetOrderCount", 24, 36);
///
/// 一个有效的连接事务
/// 存储过程名称
/// 分配给存储过程输入参数的对象数组
/// 返回结果集中的第一行第一列
public static object ExecuteScalar(string interfaceId, DbTransaction transaction, string spName, params object[] parameterValues)
{
if (transaction == null) throw new ArgumentNullException("transaction");
if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// 如果有参数值
if ((parameterValues != null) && (parameterValues.Length > 0))
{
// PPull the parameters for this stored procedure from the parameter cache ()
DbParameter[] commandParameters = GetSpParameterSet(interfaceId, transaction.Connection, spName);
// 给存储过程参数赋值
AssignParameterValues(commandParameters, parameterValues);
// 调用重载方法
return ExecuteScalar(interfaceId, transaction, CommandType.StoredProcedure, spName, commandParameters);
}
else
{
// 没有参数值
return ExecuteScalar(interfaceId, transaction, CommandType.StoredProcedure, spName);
}
}
#endregion ExecuteScalar
#region FillDataset 填充数据集
///
/// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.
///
///
/// 示例:
/// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
//public static void FillDataset(CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
//{
// if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
// if (dataSet == null) throw new ArgumentNullException("dataSet");
// // 创建并打开数据库连接对象,操作完成释放对象.
// using (DbConnection connection = Factory.CreateConnection())
// {
// connection.ConnectionString = ConnectionString;
// connection.Open();
// // 调用指定数据库连接字符串重载方法.
// FillDataset(connection, commandType, commandText, dataSet, tableNames);
// }
//}
///
/// 执行指定数据库连接字符串的命令,映射数据表并填充数据集.指定命令参数.
///
///
/// 示例:
/// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接字符串
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 分配给命令的SqlParamter参数数组
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
//public static void FillDataset(CommandType commandType, string commandText, DataSet dataSet, string[] tableNames, params DbParameter[] commandParameters)
//{
// if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
// if (dataSet == null) throw new ArgumentNullException("dataSet");
// // 创建并打开数据库连接对象,操作完成释放对象.
// using (DbConnection connection = Factory.CreateConnection())
// {
// connection.ConnectionString = ConnectionString;
// connection.Open();
// // 调用指定数据库连接字符串重载方法.
// FillDataset(connection, commandType, commandText, dataSet, tableNames, commandParameters);
// }
//}
///
/// 执行指定数据库连接字符串的命令,映射数据表并填充数据集,指定存储过程参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// FillDataset(connString, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, 24);
///
/// 一个有效的数据库连接字符串
/// 存储过程名称
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给存储过程输入参数的对象数组
//public static void FillDataset(string spName, DataSet dataSet, string[] tableNames, params object[] parameterValues)
//{
// if (ConnectionString == null || ConnectionString.Length == 0) throw new ArgumentNullException("ConnectionString");
// if (dataSet == null) throw new ArgumentNullException("dataSet");
// // 创建并打开数据库连接对象,操作完成释放对象.
// using (DbConnection connection = Factory.CreateConnection())
// {
// connection.ConnectionString = ConnectionString;
// connection.Open();
// // 调用指定数据库连接字符串重载方法.
// FillDataset(connection, spName, dataSet, tableNames, parameterValues);
// }
//}
///
/// 执行指定数据库连接对象的命令,映射数据表并填充数据集.
///
///
/// 示例:
/// FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
public static void FillDataset(string interfaceId, DbConnection connection, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
{
FillDataset(interfaceId, connection, commandType, commandText, dataSet, tableNames, null);
}
///
/// 执行指定数据库连接对象的命令,映射数据表并填充数据集,指定参数.
///
///
/// 示例:
/// FillDataset(conn, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给命令的SqlParamter参数数组
public static void FillDataset(string interfaceId, DbConnection connection, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames, params DbParameter[] commandParameters)
{
FillDataset(interfaceId, connection, null, commandType, commandText, dataSet, tableNames, commandParameters);
}
///
/// 执行指定数据库连接对象的命令,映射数据表并填充数据集,指定存储过程参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// FillDataset(conn, "GetOrders", ds, new string[] {"orders"}, 24, 36);
///
/// 一个有效的数据库连接对象
/// 存储过程名称
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给存储过程输入参数的对象数组
//public static void FillDataset(DbConnection connection, string spName, DataSet dataSet, string[] tableNames, params object[] parameterValues)
//{
// if (connection == null) throw new ArgumentNullException("connection");
// if (dataSet == null) throw new ArgumentNullException("dataSet");
// if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// // 如果有参数值
// if ((parameterValues != null) && (parameterValues.Length > 0))
// {
// // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
// DbParameter[] commandParameters = GetSpParameterSet(connection, spName);
// // 给存储过程参数赋值
// AssignParameterValues(commandParameters, parameterValues);
// // 调用重载方法
// FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
// }
// else
// {
// // 没有参数值
// FillDataset(connection, CommandType.StoredProcedure, spName, dataSet, tableNames);
// }
//}
///
/// 执行指定数据库事务的命令,映射数据表并填充数据集.
///
///
/// 示例:
/// FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"});
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
//public static void FillDataset(DbTransaction transaction, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames)
//{
// FillDataset(transaction, commandType, commandText, dataSet, tableNames, null);
//}
///
/// 执行指定数据库事务的命令,映射数据表并填充数据集,指定参数.
///
///
/// 示例:
/// FillDataset(trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new DbParameter("@prodid", 24));
///
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给命令的SqlParamter参数数组
public static void FillDataset(string interfaceId, DbTransaction transaction, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames, params DbParameter[] commandParameters)
{
FillDataset(interfaceId, transaction.Connection, transaction, commandType, commandText, dataSet, tableNames, commandParameters);
}
///
/// 执行指定数据库事务的命令,映射数据表并填充数据集,指定存储过程参数值.
///
///
/// 此方法不提供访问存储过程输出参数和返回值参数.
///
/// 示例:
/// FillDataset(trans, "GetOrders", ds, new string[]{"orders"}, 24, 36);
///
/// 一个有效的连接事务
/// 存储过程名称
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给存储过程输入参数的对象数组
//public static void FillDataset(DbTransaction transaction, string spName, DataSet dataSet, string[] tableNames, params object[] parameterValues)
//{
// if (transaction == null) throw new ArgumentNullException("transaction");
// if (transaction != null && transaction.Connection == null) throw new ArgumentException("The transaction was rollbacked or commited, please provide an open transaction.", "transaction");
// if (dataSet == null) throw new ArgumentNullException("dataSet");
// if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
// // 如果有参数值
// if ((parameterValues != null) && (parameterValues.Length > 0))
// {
// // 从缓存中加载存储过程参数,如果缓存中不存在则从数据库中检索参数信息并加载到缓存中. ()
// DbParameter[] commandParameters = GetSpParameterSet(transaction.Connection, spName);
// // 给存储过程参数赋值
// AssignParameterValues(commandParameters, parameterValues);
// // 调用重载方法
// FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames, commandParameters);
// }
// else
// {
// // 没有参数值
// FillDataset(transaction, CommandType.StoredProcedure, spName, dataSet, tableNames);
// }
//}
///
/// [私有方法][内部调用]执行指定数据库连接对象/事务的命令,映射数据表并填充数据集,DataSet/TableNames/DbParameters.
///
///
/// 示例:
/// FillDataset(conn, trans, CommandType.StoredProcedure, "GetOrders", ds, new string[] {"orders"}, new DbParameter("@prodid", 24));
///
/// 一个有效的数据库连接对象
/// 一个有效的连接事务
/// 命令类型 (存储过程,命令文本或其它)
/// 存储过程名称或SQL语句
/// 要填充结果集的DataSet实例
/// 表映射的数据表数组
/// 用户定义的表名 (可有是实际的表名.)
///
/// 分配给命令的SqlParamter参数数组
private static void FillDataset(string interfaceId, DbConnection connection, DbTransaction transaction, CommandType commandType, string commandText, DataSet dataSet, string[] tableNames, params DbParameter[] commandParameters)
{
if (connection == null) throw new ArgumentNullException("connection");
if (dataSet == null) throw new ArgumentNullException("dataSet");
// 创建DbCommand命令,并进行预处理
DbCommand command = Factory(interfaceId).CreateCommand();
bool mustCloseConnection = false;
PrepareCommand(command, connection, transaction, commandType, commandText, commandParameters, out mustCloseConnection);
// 执行命令
using (DbDataAdapter dataAdapter = Factory(interfaceId).CreateDataAdapter())
{
dataAdapter.SelectCommand = command;
// 追加表映射
if (tableNames != null && tableNames.Length > 0)
{
string tableName = "Table";
for (int index = 0; index < tableNames.Length; index++)
{
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");
dataAdapter.TableMappings.Add(tableName, tableNames[index]);
tableName += (index + 1).ToString();
}
}
// 填充数据集使用默认表名称
dataAdapter.Fill(dataSet);
// 清除参数,以便再次使用.
command.Parameters.Clear();
}
if (mustCloseConnection)
connection.Close();
}
#endregion
#region 检索指定的存储过程的参数集
///
/// 返回指定的存储过程的参数集
///
///
/// 这个方法将查询数据库,并将信息存储到缓存.
///
/// 一个有效的数据库连接字符
/// 存储过程名
/// 返回DbParameter参数数组
public static DbParameter[] GetSpParameterSet(string interfaceId, string spName)
{
return GetSpParameterSet(interfaceId, spName, false);
}
///
/// 返回指定的存储过程的参数集
///
///
/// 这个方法将查询数据库,并将信息存储到缓存.
///
/// 一个有效的数据库连接字符.
/// 存储过程名
/// 是否包含返回值参数
/// 返回DbParameter参数数组
public static DbParameter[] GetSpParameterSet(string interfaceId, string spName, bool includeReturnValueParameter)
{
if (ConnectionString(interfaceId) == null || ConnectionString(interfaceId).Length == 0) throw new ArgumentNullException("ConnectionString");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
using (DbConnection connection = Factory(interfaceId).CreateConnection())
{
connection.ConnectionString = ConnectionString(interfaceId);
return GetSpParameterSetInternal(interfaceId, connection, spName, includeReturnValueParameter);
}
}
///
/// [内部]返回指定的存储过程的参数集(使用连接对象).
///
///
/// 这个方法将查询数据库,并将信息存储到缓存.
///
/// 一个有效的数据库连接字符
/// 存储过程名
/// 返回DbParameter参数数组
internal static DbParameter[] GetSpParameterSet(string interfaceId, DbConnection connection, string spName)
{
return GetSpParameterSet(interfaceId, connection, spName, false);
}
///
/// [内部]返回指定的存储过程的参数集(使用连接对象)
///
///
/// 这个方法将查询数据库,并将信息存储到缓存.
///
/// 一个有效的数据库连接对象
/// 存储过程名
///
/// 是否包含返回值参数
///
/// 返回DbParameter参数数组
internal static DbParameter[] GetSpParameterSet(string interfaceId, DbConnection connection, string spName, bool includeReturnValueParameter)
{
if (connection == null) throw new ArgumentNullException("connection");
using (DbConnection clonedConnection = (DbConnection)((ICloneable)connection).Clone())
{
return GetSpParameterSetInternal(interfaceId, clonedConnection, spName, includeReturnValueParameter);
}
}
///
/// [私有]返回指定的存储过程的参数集(使用连接对象)
///
/// 一个有效的数据库连接对象
/// 存储过程名
/// 是否包含返回值参数
/// 返回DbParameter参数数组
private static DbParameter[] GetSpParameterSetInternal(string interfaceId, DbConnection connection, string spName, bool includeReturnValueParameter)
{
if (connection == null) throw new ArgumentNullException("connection");
if (spName == null || spName.Length == 0) throw new ArgumentNullException("spName");
string hashKey = connection.ConnectionString + ":" + spName + (includeReturnValueParameter ? ":include ReturnValue Parameter" : "");
DbParameter[] cachedParameters;
cachedParameters = m_paramcache[hashKey] as DbParameter[];
if (cachedParameters == null)
{
DbParameter[] spParameters = DiscoverSpParameterSet(interfaceId, connection, spName, includeReturnValueParameter);
m_paramcache[hashKey] = spParameters;
cachedParameters = spParameters;
}
return CloneParameters(cachedParameters);
}
#endregion 参数集检索结束
#region 生成参数
public static DbParameter MakeInParam(string interfaceId, string ParamName, DbType DbType, int Size, object Value)
{
return MakeParam(interfaceId, ParamName, DbType, Size, ParameterDirection.Input, Value);
}
public static DbParameter MakeOutParam(string interfaceId, string ParamName, DbType DbType, int Size)
{
return MakeParam(interfaceId, ParamName, DbType, Size, ParameterDirection.Output, null);
}
public static DbParameter MakeParam(string interfaceId, string ParamName, DbType DbType, Int32 Size, ParameterDirection Direction, object Value)
{
DbParameter param;
param = Provider(interfaceId).MakeParam(ParamName, DbType, Size);
param.Direction = Direction;
if (!(Direction == ParameterDirection.Output && Value == null))
param.Value = Value;
return param;
}
public static DbParameter MakeParamByColumn(string interfaceId, string ParamName, DbType DbType, Int32 Size, string ColumnName)
{
DbParameter param;
param = Provider(interfaceId).MakeParam(ParamName, DbType, Size);
param.Direction = ParameterDirection.Input;
param.SourceColumn = ColumnName;
return param;
}
#endregion 生成参数结束
#region 执行ExecuteScalar,将结果以字符串类型输出。
public static string ExecuteScalarToStr(string interfaceId, CommandType commandType, string commandText)
{
object ec = ExecuteScalar(interfaceId, commandType, commandText);
if (ec == null)
{
return "";
}
return ec.ToString();
}
public static string ExecuteScalarToStr(string interfaceId, CommandType commandType, string commandText, params DbParameter[] commandParameters)
{
object ec = ExecuteScalar(interfaceId, commandType, commandText, commandParameters);
if (ec == null)
{
return "";
}
return ec.ToString();
}
#endregion
}
}