我已将数据从excel文件上传到数据表中。什么是检查数据表中空行的最佳方法。注意:需要 Visual Studio 2005 的解决方案。不能使用linq。
foreach (DataRow row in result.Rows)
{
//check if row is empty
//if not continue processing data
//else remove the row from datatable
}
目前我脑海中的解决方案是在foreach循环中,放置另一个foreach循环并检查每一列。如果所有列都为null,则从datatable中删除该行。
还有其他最佳方法吗?上述方法是否需要更多时间来执行,因为每个循环都有另一个方法。数据表中会有很多行。
编辑:
我有一个代码:
private bool checkIfRowEmpty(DataRow row)
{
var r = (DataRow)row;
int emptyCount = 0;
int itemArrayCount = r.ItemArray.Length;
foreach (var i in r.ItemArray) if (string.IsNullOrWhiteSpace(i.ToString())) emptyCount++;
if (emptyCount == itemArrayCount) return false;
else return true;
}
这可以吗?或者我应该使用下面的任何解决方案?哪一个好?
答案 0 :(得分:0)
我能想到的最佳解决方案如下:
public bool IsRowEmpty(DataRow row)
{
if (row == null)
return true;
foreach(var value in row.ItemArray)
{
if (value != null)
return false;
}
return true;
}
然后从您的主要代码:
foreach (DataRow row in result.Rows)
{
if(!IsRowEmpty(row))
{
// Row is not empty.
}
}
答案 1 :(得分:0)
这是一种方法 - 迭代所有行和所有列
DataTable table = new DataTable();
List<int> rowsToRemove = new List<int>();
for (int i = 0; i < table.Rows.Count; i++)
{
DataRow row = table.Rows[i];
foreach (DataColumn col in row.Table.Columns)
{
bool skip = false;
if (row[col] != null)
{
//this column is not null, so mark skip flag as true
skip = true;
}
if (skip)
//this row should be skipped because it has at least one column that isn't null
break;
else
rowsToRemove.Add(i);
//mark this row's index for deletion
}
}
//loop through list in reverse order and remove rows by their index
for (int i = rowsToRemove.Count; i > 0; i--)
table.Rows.RemoveAt(i);
答案 2 :(得分:0)
<强>您好强>
您可以使用DataView简单地实现此目的:像这样 -
sqoop import --connect jdbc:oracle:thin:@127.0.0.1:1521:XE --username ROOT --password manager --table temp --target-dir /sqoop/tmp1 -m 3