繁体   English   中英

值不能是 null c#.net

[英]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子句的MAXMINTOP 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM