여러 가지 데이터를 데이터베이스에 저장하는 응용 프로그램이 있습니다. 데이터베이스가 ORACLE 또는 SQL Server 일 수 있습니다. SQL은 실행 중에 수집 된 구성 및 값을 기반으로 동적으로 생성됩니다.DbCommand 및 매개 변수화 된 SQL, ORACLE vs SQL Server
DbProviderFactory를 사용하면 내 데이터베이스 메소드가 ORACLE 또는 SQL Server와 함께 작업 할 수 있습니다. 매개 변수/바인드 변수. 오라클의 경우 ":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();
}
솔루션 : http://stackoverflow.com/questions/35063018/parameterized-sql-oracle-vs-sql-server-with-regular-expresion –