Jag accepterade ett svar på den här frågan för länge sedan, men av någon anledning finns inte det svaret längre... Så jag antar att jag måste svara på min egen fråga.
Det jag gjorde var att skapa en parabuilderklass:
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;
}
}
Jag skapar en medlemsvariabel av typen ParamBuilder:
private readonly ParamBuilder m_ParamBuilder;
Sedan i metoden där jag använder parametrar, använder jag den enligt följande:
...
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);
...