【发布时间】:2011-03-14 07:04:02
【问题描述】:
我有一个应用程序,它可以将各种数据存储到数据库中。 数据库可能是 ORACLE 或 SQL Server。 SQL 是根据执行期间获取的配置和值动态创建的。
通过使用 DbProviderFactory,我的 db 方法能够与 ORACLE 或 SQL Server 一起使用,而无需为任何数据库编写自定义代码,除了一件事;参数/绑定变量。对于 ORACLE,我需要使用 ":ParameterName",而对于 SQL Server,我需要使用 "@ParameterName"。有没有办法让这个通用?
示例代码:
public class DbOperations
{
private DbProviderFactory m_factory;
private DbConnection m_CN;
...
private void InsertToDb(ValueType[] values, ColumnType[] columns)
{
DbCommand Cmd = m_factory.CreateCommand();
Cmd.Connection = m_CN;
StringBuilder sql = new StringBuilder();
sql.Append("INSERT INTO ");
sql.Append(DestinationTable);
sql.Append(" (");
for (int i = 0; i < columns.Length; i++)
{
sql.Append(columns[i].ColumnName);
if (i < columns.Length - 1)
sql.Append(", ");
}
sql.Append(") VALUES (");
for (int i = 0; i < values.Length; i++)
{
//sql.Append(String.Format(":{0}", columns[i].ColumnName)); //ORACLE
sql.Append(String.Format("@{0}", columns[i].ColumnName)); // SQL Server
}
DbParameter param = m_factory.CreateParameter();
param.Direction = ParameterDirection.Input;
param.ParameterName = columns[i].ColumnName;
param.Value = values[i];
Cmd.Parameters.Add(param);
if (i < columns.Length - 1)
sql.Append(", ");
}
sql.Append(")");
Cmd.CommandText = sql.ToString();
Cmd.ExecuteNonQuery();
}
【问题讨论】:
标签: c# sql-server oracle ado.net