繁体   English   中英

在导入数据库之前验证Excel文件数据

[英]Validation of Excel file data before importing to Database

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

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不应接受带有无效数据字段和行号的引发异常。

Praveena。

在您要读取要插入的excel值的代码中,应使用C#函数: [Int32.TryParse][1]float.Try​Parse ;

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

您可以在此处查看详细的示例/答案:

您可以通过这种方式尝试。

      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();
        }

谢谢大家的答复,在使用DataTables ,我为我的问题找到了一个简单的解决方案。 我的主要任务是从Excel文件表中读取数据行并验证每行数据,然后再将其添加到我的数据库表中(使用OracleBulkCopy),并将Excel文件表中的任何无效数据字段通知用户。

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

正如我在上面的主要问题中提到的那样,我们可以为DataTableDataColumn分配DataType ,如下所示:

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 ------------------------- 20 - 癸2018

efgh ----------------------- 56500.5 ---------------------- xyz17-Mar -2018

ijklm ----------------------- 67000 ------------------------ 1 -Jan-2018

在上表中的第三行第三列RowData日期类型无效(xyz17-Mar-2018)。 在执行oda.Fill(dt)时; 对于上表,此数据字段作为空RowData添加到DataTable 如果导入数据字段不是定义的DataColumn类型,则其他列也将相同。 因此,我的最后一步是检查具有空字段的DataTable每一行数据,并向用户抛出一条错误消息,提示行号和列名。

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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM