Это может показаться немного сложным и ненадежным, но если вы используете параметры (и вы действительно, действительно должны), у меня есть метод расширения, который я использую в своем проекте, чтобы взять любой объект команды и перебрать параметры, чтобы повернуть.NET null в DbNull:
private static void ProcessNullParameters(this DbCommand command)
{
foreach (DbParameter param in command.Parameters)
{
if (param.Value == null)
param.Value = DBNull.Value;
}
}
Таким образом, если ваш собственный объект возвращает нулевое значение, вы можете вызвать метод расширения для объекта команды.Я не мог сказать, что ваш SQL
объект был в вашем примере (фреймворк какого-то типа?), Но, предположительно, где-то за кулисами происходило что-то подобное:
SqlCommand cmd = new SqlCommand("insert into Statistics values (@Code, @Volatility)", conn);
cmd.Parameters.Add("@Code", SqlDbType.VarChar);
cmd.Parameters.Add("@Volatility", SqlDbType.Decimal);
foreach (DataRow dr in dt.Rows)
{
cmd.Parameters[0].Value = dr["Code"];
cmd.Parameters[1].Value = dr["Volatility"];
// And here you convert your nulls to DbNull
cmd.ProcessNullParameters();
cmd.ExecuteNonQuery();
}
Альтернативабудет делать это при каждом объявлении значения, которое можно обнулять.
cmd.Parameters[0].Value = dr["Code"] ?? DbNull.Value
cmd.Parameters[1].Value = dr["Volatility"] ?? DbNull.Value;