[英]Value cannot be null c#.net
我正在 c#.net 上创建一个简单的项目。 我想把 AutoNo 文本框放在我的程序中。 我已经放了,但它不起作用。 它在运行程序错误时显示错误说
值不能为 null 参数名称:Stringmscorlib
编写我尝试过的代码,我附在下面
public void Load()
{
SqlConnection Con = new SqlConnection("Data Source=.;Initial Catalog=test1;Persist Security Info=True;User ID=sa;Password=admin123");
Con.Open();
cmd = new SqlCommand("select id from records", Con);
Data = cmd.ExecuteReader();
while (Data.Read() != false)
{
auto = int.Parse(Data[0].ToString());
}
try
{
int newid = auto;
int id = newid + 1;
this.textBox1.Text = "S00" + id.ToString();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message + ex.Source);
}
Data.Close();
}
}
我可以在这里看到两个问题; 第一个是:如果有零行怎么办? 那么什么是auto
呢? 是null
吗? 然后int.Parse(null)
将失败。 您实际上并没有显示声明auto
的位置,这使得这有点难以直觉。
另一种可能性在这里:
auto = Data.GetString(0);
在这种情况下:这只是一个 null 数据库值。 检查并处理它:
if (Data.IsDBNull(0))
{ ... do whatever; perhaps just "continue" }
else
{
auto = Data.IsDBNull(0);
// and process it, etc
}
但坦率地说,你在这里让自己的生活变得艰难。 像 Dapper 这样的工具也是如此:
using (var conn= new SqlConnection("...whatever..."))
{
// here we're asserting *exactly* zero or one row
string auto = conn.QuerySingleOrDefault<string>("select id from records");
if (auto == null)
{ ... do something else? ... }
else
{
var newid= int.Parse(auto);
}
}
注意:您的查询当前可以返回任意数量的行; 由于代码只处理最后一个值,我建议 SQL 需要修复; 可能是带有ORDER BY
子句的MAX
、 MIN
或TOP 1
; 即像select MAX(id) as [id] from records
类的东西。 但是请注意,这听起来像是您应该在某些添加或插入值的查询中使用SCOPE_IDENTITY()
的场景。 一个id
应该很少是一个string
。
解析方法无法处理 null 值。 假设 auto 是变量名。
而不是这个
int newid = Int32.Parse(auto);
使用类似下面的东西
int newid=0;
int.TryParse(auto, out newid);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.