我在datatable中有null值,并希望将此null值放在整数变量中。
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";
}
}
答案 0 :(得分:1)
您的代码中有几个基本错误。下面是一些解释的错误,并在答案的最后建议如何重写代码。
您正尝试从行中获取数据,现在从单元格中获取数据。数据存储在行单元格中:
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中的单元格值永远不会是null
。而值是DBNull.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";
}
答案 1 :(得分:-1)
将其投放到int?
int? ii = dt.Rows[i] as int?;
如果dt.Rows[i]
值不是int
,则ii将为null,否则它将是dt.Rows[i]
中存储的整数值。