मेरे पास एक ऐसा एप्लीकेशन है जो अन्य चीजों के साथ डेटाबेस में विभिन्न डेटा स्टोर करेगा। डेटाबेस ओरेकल या SQL सर्वर हो सकता है। एसक्यूएल निष्पादन के दौरान उठाए गए विन्यास और मूल्यों के आधार पर गतिशील रूप से बनाया गया है।डीबीकॉमैंड और पैरामीटर एसक्यूएल, ओरेकल बनाम एसक्यूएल सर्वर
डीबीप्रोवाइडर फैक्टरी का उपयोग करके मेरी डीबी विधियां किसी भी डेटाबेस को किसी भी डेटाबेस के लिए कस्टम कोड लिखने के बिना या तो ओरेकल या एसक्यूएल सर्वर के साथ काम करने में सक्षम हैं; पैरामीटर/बाध्य चर। ORACLE के लिए मुझे ":ParameterName"
का उपयोग करने की आवश्यकता है जबकि SQL सर्वर के लिए मुझे "@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 –