3 回答
TA贡献1788条经验 获得超4个赞
if(Convert.ToString(null) == "")
将被评估为假。
所以下面的代码不会被执行
row[i] = (object)DBNull.Value;
在旁注中,您应该使用 SqlParameters 而不是在字符串中附加值。
TA贡献1898条经验 获得超8个赞
这可能看起来有点笨拙和臃肿,但如果你使用参数(你真的,真的应该),我有一个我在项目中使用的扩展方法来获取任何命令对象并循环遍历参数以将 .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;
- 3 回答
- 0 关注
- 163 浏览
添加回答
举报