将数据表列的空值赋给c#中的int变量

本文关键字:中的 int 变量 数据表 空值 | 更新日期: 2023-09-27 18:05:03

我在数据表中有一个空值,并希望将这个空值放在整数变量中。

SqlConnection con = new SqlConnection("Initial Catalog=test;Data Source=test;user id=sa;password=****;");
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from table1", con);
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
    **int? ii = dt.Rows[i];**
    if (ii == null)
    {
        test.Text = ii.ToString() + "Test";
    }
}

将数据表列的空值赋给c#中的int变量

您的代码中有几个基本错误。下面是一些错误的解释,在答案的最后是如何重写你的代码的建议。


您正在尝试从行获取数据,现在从单元格获取数据。数据存储在行单元格中:

var row = dt.Rows[i]; // row contains several columns, you have to get from specific column
var ii = dt.Rows[i]["iiColumnName"];

您正在使用null对象的方法。如果ii是null,并且您尝试调用它的方法,将抛出一个异常,应用程序将崩溃

if (ii == null)
{
    test.Text = ii.ToString() + "Test"; // This will throw NullReferenceException
}

通过比较null来检查是否存在值。DataTable中的Cell值永远不会是null。值改为DBNull.Value。因此,您可以通过以下两种方式之一检查value是否设置:

if (ii is DBNull) { /* do something */ }
if (ii == DBNull.Value) { /* do something */ }

做你想做的事情的代码(希望)看起来像这样:

SqlConnection con = new SqlConnection("Initial Catalog=test;Data Source=test;user id=sa;password=****;");
DataTable dt = new DataTable();
con.Open();
SqlDataAdapter da = new SqlDataAdapter("select * from table1", con);
da.Fill(dt);
for (int i = 0; i < dt.Rows.Count; i++)
{
    DataRow row = dt.Rows[i];
    int? ii;
    if (row["iiColumnName"] is DBNull)
        ii = null;
    else
        ii = (int)row["iiColumnName"];
    if (ii != null)
        test.Text = ii.ToString() + "Test";
    else
        test.Text = "ii is not set";
}

将其转换为int?

int? ii = dt.Rows[i] as int?;

如果dt.Rows[i]不是int, ii将为null;如果不是,它将是存储在dt.Rows[i]中的整数值。