मैंने इस प्रश्न का उत्तर बहुत पहले स्वीकार कर लिया था, लेकिन किसी कारण से वह उत्तर अब यहाँ नहीं है... इसलिए मुझे लगता है कि मुझे अपने प्रश्न का उत्तर देने की आवश्यकता है।
मैंने जो किया वह एक परमबिल्डर वर्ग बनाना था:
class ParamBuilder
{
private DbProviderFactory m_factory;
private DbCommandBuilder m_builder;
private string m_parameterMarkerFormat;
public ParamBuilder(DbProviderFactory factory) : this(factory, null)
{
}
public ParamBuilder(DbProviderFactory factory, DbConnection source)
{
m_factory = factory;
m_builder = m_factory.CreateCommandBuilder();
if (source != null)
{
using (DataTable tbl =
source.GetSchema(DbMetaDataCollectionNames.DataSourceInformation))
{
m_parameterMarkerFormat =
tbl.Rows[0][DbMetaDataColumnNames.ParameterMarkerFormat] as string;
}
}
if (String.IsNullOrEmpty(m_parameterMarkerFormat))
m_parameterMarkerFormat = "{0}";
}
public DbParameter CreateParameter(string parameterName,
out string parameterMarker)
{
DbParameter param = m_factory.CreateParameter();
param.ParameterName =
(string)typeof(DbCommandBuilder).InvokeMember("GetParameterName",
System.Reflection.BindingFlags.Instance |
System.Reflection.BindingFlags.InvokeMethod |
System.Reflection.BindingFlags.NonPublic, null, m_builder,
new object[] { parameterName });
parameterMarker =
String.Format(System.Globalization.CultureInfo.InvariantCulture,
m_parameterMarkerFormat, param.ParameterName);
return param;
}
}
मैं परमबिल्डर प्रकार का सदस्य चर बनाता हूं:
private readonly ParamBuilder m_ParamBuilder;
फिर जिस विधि में मैं पैरामीटर का उपयोग करता हूं, मैं उसका उपयोग इस प्रकार करता हूं:
...
string paramMarker;
DbParameter param = m_ParamBuilder.CreateParameter(destination[i].ColumnName,
out paramMarker);
sql.Append(paramMarker);
param.Direction = ParameterDirection.Input;
param.Value = source[i];
Cmd.Parameters.Add(param);
...