C#如何检查DataTable中所有值是否为空或null?

4

我有一个DataTable,我像这样进行初始化:

dataTable = new DataTable();
dataTable.Clear();
for (int i = 0; i < labels.Length; i++)
{
    dataTable.Columns.Add(MyCSVReaderFinal.labels[i]);
}
return dataTable;

其中label是一个字符串数组,格式如下:

private static string[] labels = { "FARM ID", "FARM OWNER ARABIC", "FARM NUMBER",
"FARM MOBILE", "EMAR NAME ARABIC", "EMARA ID", "AREA NAME ARABIC", "AREA ID",
"REGION NAME ARABIC", "REGION ID", "RECEIVING CENTER NAME ARABIC",
"RECEIVING CENTER ID", "KHALAS", "FARDH", "OTHER LULU", "KHENAIZI", "BOUMAAN",
"BARHI", "JESH KHARMA", "REZIZ", "JABRI", "ANBARET AL-MADINA", "SHISHI",
"DABBAS", "NABTET SAIF", "KHEDRAWI", "HILALI", "MAKTOUMY", "NAMISHI",
"SULTANAH", "BAQLAT AL-TAWAA", "BAQLAT AL-DAHLA", "BAQLAT AL-RARENJA", 
"SUKARY", "SAQEI", "ABU ZEBED", "MAJDOUL", "SHABIBI", "YOUWANI", "YARDI",
"KHADI", "HATIMI", "NEGHAL", "OTHER SAYER", "TOTAL FRUCTIFEROUS",
"TOTAL UN FRUCTIFEROUS", "TOTAL AFHAL", "GENERAL TOTAL", "SENIOR SUPERVISORS",
"ASSISTANT", "DATA ENTRY", "FARM ONWER OR BEHALF" };

我想检查数据表中每个值的空字符串或null:

我尝试了以下代码:

for (int i = 0; i < dt.Rows.Count; i++) {
    for (int j = 0; j < dt.Columns.Count; j++) { 
        if(string.IsNullOrEmpty(dt.Rows[i].)){}
    }
}

但是你看,我尝试了这个:dt.Rows[i]. 但我不知道如何获取值。

请问你能帮我吗?


你想在什么时候知道它是null还是空的?在填充表格之前还是之后?另外,为什么,你想做什么呢?基本上,你的问题可以简化为“如何通过列索引访问DataRow的字段”,这个问题经常被问到并且有很好的文档记录。 - Tim Schmelter
@TimSchmelter 我想这样做是因为我在将datatable插入到我的sql批量复制时不断收到错误The given value of type String from the data source cannot be converted to type nvarchar of the specified target column.,并且我在这个问题https://dev59.com/BWMl5IYBdhLWcg3wyJUe中读到了这个问题,那是因为空字符串,但即使应用了下面的答案,我仍然会得到那个错误,请你帮忙吗? - Marco Dinatsoli
6个回答

7

使用索引器

dt.Rows[i][j] != null && string.IsNullOrEmpty(dt.Rows[i][j].ToString())

1
尝试这个。
 if(string.IsNullOrEmpty(dt.Rows[i][j].ToString()))

0

//尝试使用此代码来处理DataTable,当从数据库中未捕获任何数据时

DataTable dt = (arrg);
try { 

     statement 1...................
     statement 2...................
    ..........................
 }
catch (Exception ex)
{
    Alert Message of error
}

0
跟随 @Selman22 的答案: 你不需要为了 .ToString() 操作而再次检查 string.IsNullOrEmpty(string) 中的 null。 可以使用以下方式:
if(dt.Rows[i][j] != null && dt.Rows[i][j] != string.Empty)

您应该尽量减少检查条件(包括 .Net 提供的和显式的条件)。在您的情况下,特别是因为您将会检查 DataTable 的每个单元格,如果有太多的条件检查可能会很耗费时间。


0
for (int numberOfCells = 0; numberOfCells < this.dataGridView1.Columns.Count; numberOfCells++)
{
  if (String.IsNullOrEmpty(this.dataGridView1.Rows[0].Cells[numberOfCells].Value as String))
  {
     //empty
  }
  else
  {
     //not empty
  }
}

5
为什么OP应该使用你的代码?请解释你的答案。 为什么OP要使用您的代码?请解释您的答案。 - Zippy
这似乎并没有回答问题。OP正在询问如何使用DataTable而不是dataGridView1 - dbc

0
对于较新的C#版本,使用空值合并运算符??有一些很不错的功能,所以在这种情况下,你可以这样做:
if (string.IsNullOrEmpty(((dt?.Rows?[0][0]) ?? string.Empty).ToString()))

或者

if (string.IsNullOrEmpty((string)((dt?.Rows?[0][0]) ?? string.Empty)))

您可以在多篇文章中找到更多信息,比如这篇文章:

?? 和 ??= 运算符(C# 参考)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接