将空值插入 SQL 数据库
Insert Null value into TSQL database
即使我已经阅读了有关 null 和数据库的问题,我还是有点困惑。我想弄清楚如何将 NULL 发送到 C# 中的数据库。方法签名是
MyMethod(string category, int? calories, int vegetarianFriendlyMeal);
当用 not null int 调用时没问题,但是当我传递 null 时它说。
SqlCommand.Prepare method requires all parameters to have an explicitly set type.
你能告诉我如何允许将 null 传递给数据库并在下面的代码中显式设置类型吗?谢谢。
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
if (calories == null)
{
command.Parameters.AddWithValue("@calories", DBNull.Value);
}
else
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories;
}
我也试过了
SqlParameter cal = new SqlParameter("@calories", calories == null ? (object)DBNull.Value : calories);
command.Parameters.Add(cal);
同样的结果。
你试过了吗:
cmd.Parameters.Add("@calories", System.Data.SqlDbType.Int).Value = DBNull.Value;
这里的解决方法很简单。在情况 1 中,使用 AddWithValue
的 .NET 无法推断出 DBNull.Value
的关联类型。情况1的解决方案是:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
if (calories == null)
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = (object)DBNull.Value;
}
else
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories;
}
在情况 2 中,您根本不提供类型。解决方案是:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
SqlParameter cal = new SqlParameter("@calories", calories == null ? (object)DBNull.Value : calories);
cal.DbType = SqlDbType.Int;
command.Parameters.Add(cal);
但是如果你想让它干净,你可以这样做:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories ?? (object)DBNull.Value;
编辑:不要使用 AddWithValue
。让 .NET 为您填补漏洞是有风险的。
即使我已经阅读了有关 null 和数据库的问题,我还是有点困惑。我想弄清楚如何将 NULL 发送到 C# 中的数据库。方法签名是
MyMethod(string category, int? calories, int vegetarianFriendlyMeal);
当用 not null int 调用时没问题,但是当我传递 null 时它说。
SqlCommand.Prepare method requires all parameters to have an explicitly set type.
你能告诉我如何允许将 null 传递给数据库并在下面的代码中显式设置类型吗?谢谢。
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
if (calories == null)
{
command.Parameters.AddWithValue("@calories", DBNull.Value);
}
else
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories;
}
我也试过了
SqlParameter cal = new SqlParameter("@calories", calories == null ? (object)DBNull.Value : calories);
command.Parameters.Add(cal);
同样的结果。
你试过了吗:
cmd.Parameters.Add("@calories", System.Data.SqlDbType.Int).Value = DBNull.Value;
这里的解决方法很简单。在情况 1 中,使用 AddWithValue
的 .NET 无法推断出 DBNull.Value
的关联类型。情况1的解决方案是:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
if (calories == null)
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = (object)DBNull.Value;
}
else
{
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories;
}
在情况 2 中,您根本不提供类型。解决方案是:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
SqlParameter cal = new SqlParameter("@calories", calories == null ? (object)DBNull.Value : calories);
cal.DbType = SqlDbType.Int;
command.Parameters.Add(cal);
但是如果你想让它干净,你可以这样做:
command.Parameters.Add("@cat", SqlDbType.VarChar, 2).Value = category;
command.Parameters.Add("@veg", SqlDbType.Int).Value = vegetarianFriendlyMeal;
command.Parameters.Add("@calories", SqlDbType.Int).Value = calories ?? (object)DBNull.Value;
编辑:不要使用 AddWithValue
。让 .NET 为您填补漏洞是有风险的。