在Visual Studio 2005中检查数据表中的空行,不检查LINQ

时间:2017-04-20 06:37:54

标签: c# .net visual-studio visual-studio-2005

我已将数据从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;
    }

这可以吗?或者我应该使用下面的任何解决方案?哪一个好?

3 个答案:

答案 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