假设我有一个 MySql 存储过程,它插入一条包含一些可为空的 CHAR 字段的记录。
在 VB.NET 中,如果我不检查 Nothing(或其他语言中的 Null),我会从 db 驱动程序中得到一个异常,所以我写:
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("_name", if(name Is Nothing, "", name)).Direction = ParameterDirection.Input;
这是我不喜欢的第一件事;我想传递 Nothing 并且驱动程序知道它必须将 NULL 放入 Db 中。但是,在存储过程中,我必须检查该字段是否为空:
INSERT INTO mytable
(
name,
-- other 200 char fields
)
VALUES
(
NULLIF(_name, ''),
-- other 200 char fields
)
丑吗?我必须检查两次是否为虚无/空虚。 有没有更好、更直接的方法?
更糟糕的是,对于非引用类型(即整数),检查是否为空是没有意义的,因为原始类型不可能是空的(是的,我可以将整数设置为无意义的值,比如 -1一个肯定的 id,但是......)。
最佳答案
如果要插入 NULL
,请使用 next:
command.Parameters.AddWithValue("_name", name ?? DBNull.Value);
意思是一样的
if(name != null)
command.Parameters.AddWithValue("_name", name);
else
command.Parameters.AddWithValue("_name", DBNull.Value);
在 MSDN 上查看有关空合并运算符的更多信息
如果你想插入空字符 ''
你下一步:
command.Parameters.AddWithValue("_name", name ?? '');
关于.NET 和 MySql 参数,AddWithValue NULL 变量,如何避免检查空值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3718755/