关于c#:在导入数据库之前验证Excel文件数据

Validation of Excel file data before importing to Database

我正在尝试将Excel文件中的数据读取到DataTable。我知道,当向DataTable添加列时,我们可以为DataColumn分配不同的DataTypes。到目前为止,我尝试了以下方法,

1
2
3
4
5
6
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2]
{
    new Datacolumn("column1", typeof(string)),
    new DataColumn("column2", typeof(int))
});

我的Excel文件有两列数据,如下所示:

第1列------第2列

ABC-----------230

定义-----------230TR

如上所示,第二行第二列的值为'230tr',DataTable不应接受抛出异常,因为数据字段和行号无效。

普拉维娜


感谢大家的回答,我在与DataTables合作时找到了一个简单的问题解决方案。我的主要任务是从Excel文件工作表中读取数据行,并在将其添加到数据库表(使用OracleBluckCopy)之前验证每行数据,并使用Excel文件工作表中的任何无效数据字段通知用户。

当我使用oda.Fill(dt);从excel文件表中导入数据到DataTable时,我意识到在向DataTable添加数据的过程中,有些DataRow字段为空(空)。

正如我在上述主要问题中所提到的,我们可以将DataType分配给DataTable中的DataColumn,如下所示:

1
2
3
4
5
6
7
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[3]
{
    new Datacolumn("column1", typeof(string)),
    new DataColumn("column2", typeof(double)),
    new DataColumn("column3", typeof(DateTime))
});

我的Excel文件表如下:

第1列-----------第2列-----------第3列

ABCD--------------20000-------------------2018年12月20日

EFGH——56500.5——XYZ17——2018年3月

IJKLM——67000——2018年1月1日

上表第3行第3列中,RowData为无效日期类型(xyz17-mar-2018)。在执行oda.fill(dt)时,对于上表,此数据字段作为空的RowData添加到DataTable中。如果导入的数据字段不属于定义的DataColumn类型,其他列的情况也一样。因此,我的最后一步是检查DataTable的每一行数据,该数据有一个空字段,并向用户发送一条错误消息,其中提到了行号和列名。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int errorRowNumber = 0;

private bool validateDataTableData(DataTable dt, string dtColumnName)
{
    Boolean isTrue = false;

    foreach (DataRow r in dt.Rows)
    {
          if(!string.IsNullOrEmpty(r[dtColumnName].ToString()))
          {
                isTrue = false;
                errorRowNumber = dt.Rows.IndexOf(r) + 2;
                break;
          }
    }
    return isTrue;
}


你可以这样试试。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
      DataTable dt = new DataTable();
        dt.Columns.AddRange(new DataColumn[2]
        {
          new DataColumn("column1", typeof(int)),
          new DataColumn("column2", typeof(string))
        });

        dt.Clear();
        try
        {
            string input = string.Empty;
            input = Console.ReadLine();
            if (Regex.IsMatch(input, @"^[a-zA-Z]+$"))
            {
                dt.Rows.Add(1, input);
            }
            Console.WriteLine(dt.Rows[0]["column2"]);
            Console.ReadKey();
        }
        catch(Exception ex)
        {
            Console.WriteLine(ex);
            Console.ReadKey();
        }


在您的代码中,当您读取要插入的Excel值时,您应该使用c函数:[Int32.TryParse][1]float.Try?Parse

它将告诉您字符串是否将转换为浮点(或整数),在这种情况下,不插入它。

您可以在这里看到一个详细的示例/答案: