今天在向数据库中插入时,可空值处理很不方便,请大家支支招.下面的字段在数据库中设置都是可空的.
具体问题是这样的:
cmd.Parameters["@TcpPort"].Value = Convert.ToInt32(txt_TcpPort.Text.ToString());
当txt_TcpPort.Text=""时,就报错:参数化查询 '(@Name varchar(6),@ParentID varchar(1),@IPAddr varchar(8000),@Tc' 需要参数 @TcpPort,但未提供该参数.
若当txt_TcpPort.Text=""时,cmd.Parameters["@TcpPort"].Value=null也出错.这是为什么呀?
我不想给其赋值,却非得赋0才好.
而对下面的这个:
if (txt_IPAddr.Text =="")
{
cmd.Parameters["@IPAddr"].Value =null;
}
else
{
cmd.Parameters["@IPAddr"].Value = txt_IPAddr.Text;
}
同样出错,将上面的null换成""就好了,而直接写成下面的一句话,同样是上面的那种报错.
cmd.Parameters["@IPAddr"].Value = txt_IPAddr.Text;
这又是为什么呢? 大家帮帮忙呀.
具体问题是这样的:
cmd.Parameters["@TcpPort"].Value = Convert.ToInt32(txt_TcpPort.Text.ToString());
当txt_TcpPort.Text=""时,就报错:参数化查询 '(@Name varchar(6),@ParentID varchar(1),@IPAddr varchar(8000),@Tc' 需要参数 @TcpPort,但未提供该参数.
若当txt_TcpPort.Text=""时,cmd.Parameters["@TcpPort"].Value=null也出错.这是为什么呀?
我不想给其赋值,却非得赋0才好.
而对下面的这个:
if (txt_IPAddr.Text =="")
{
cmd.Parameters["@IPAddr"].Value =null;
}
else
{
cmd.Parameters["@IPAddr"].Value = txt_IPAddr.Text;
}
同样出错,将上面的null换成""就好了,而直接写成下面的一句话,同样是上面的那种报错.
cmd.Parameters["@IPAddr"].Value = txt_IPAddr.Text;
这又是为什么呢? 大家帮帮忙呀.
解决方案 »
- 很菜的问题:BeginReceiveFrom 如何知道接收到了多少数据?
- .NET生成1万个6位数的随即字符串(字母加数字)随即数不能相同
- 如何往xml标签上加namespace
- C# 调用MFC DLL 遇到的问题,错误:内存分配访问失效------>>>>
- 关于Socket使用Tcp协议执行异步发送(Send)
- 请教一个替换字符串的正则表达式
- 如何将VB中的scaleX(x,vbTwips,vbPixel)转换成C#中的语句呢?
- System.ComponentModel.Win32Exception: 拒绝访问
- 怎么生成dll?
- oracle编程中怎样使用事务
- 一个想不明白的问题?
- datatimepicker控件怎么把value里的时间去掉只留日期
上面不需要@,写在sqlserver的sql语句中时需要@,写在参数里面时不需要。另oracle中是":"。
cmd.Parameters["@IPAddr"].Value =null;
后面改成DbNull.Value
另外上面也可以不用转换,直接把DataBase中的TcpPort字段改为string类型,这样在插入时就不用去判断了,当txt_TcpPort.Text为空与否,同等处理就可,是个端口号,用int和string是一样的吧?
当txt_IPAddr.Text =""时,txt_IPAddr.Text =null并不成立,不能等同.并且这时插入数据库中的是显示的是空(没有值),也不是NULL.
3楼说得可以,但同时要把cmd.Parameters.Add("@ParentID", SqlDbType.VarChar);这里的@也去掉才行,否则会提示:
“此 SqlParameterCollection 中未包含带有 ParameterName“ParentID”的 SqlParameter。”
SQL语句中的不能去,去了就有以下提示:
“在此上下文中不允许使用名称 "ParentID"。有效表达式包括常量、常量表达式和变量(在某些上下文中)。不允许使用列名。”