假设我有一个MySql存储过程,它插入一些带有一些可空字符的字段的记录.
在VB.NET中,如果我没有检查Nothing(或其他语言中的Null),我从db驱动程序中得到一个异常,所以我写道:
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("_name", if(name Is Nothing, "", name)).Direction = ParameterDirection.Input;
这是我不喜欢的第一件事;我想传递Nothing,驱动程序知道它必须在Db中放置NULL.但是,在存储过程中,我必须检查字段是否为空:
INSERT INTO mytable
(
name,
-- other 200 char fields
)
VALUES
(
NULLIF(_name, ''),
-- other 200 char fields
)
丑呃?我必须两次检查虚无/空虚.
有更好,更直接的方式吗?
更糟糕的是,对于非引用类型(即:整数),检查虚无是没有意义的,因为基本类型不能是空的(是的,我可以将整数设置为无意义的值,对于正id,将-1设置为1) ,但……).
解决方法:
如果要插入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上查看有关null-coalescing运算符的更多信息
如果你想插入空的char”你接下来:
command.Parameters.AddWithValue("_name", name ?? '');
标签:mysql,net,null,vb-net
来源: https://codeday.me/bug/20190827/1739259.html