Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 导入数据库前验证Excel文件数据_C#_Asp.net_Excel_Datatable_Oledb - Fatal编程技术网

C# 导入数据库前验证Excel文件数据

C# 导入数据库前验证Excel文件数据,c#,asp.net,excel,datatable,oledb,C#,Asp.net,Excel,Datatable,Oledb,我正在尝试将数据从Excel文件读取到数据表。我知道在向数据表添加列时,我们可以为数据列分配不同的数据类型。到目前为止,我已经尝试了以下方法 DataTable dt = new DataTable(); dt.Columns.AddRange(new DataColumn[2] { new Datacolumn("column1", typeof(string)), new DataColumn("column2", typeof(int)) }); 我的excel文件有两列

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

DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2]
{
    new Datacolumn("column1", typeof(string)),
    new DataColumn("column2", typeof(int))
});
我的excel文件有两列数据,如下所示

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))
});
第1列------第2列

abc---------230

def------------------230tr

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


Praveena.

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

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


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

您可以这样尝试

      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文件表中读取数据行,在将每行数据添加到我的数据库表(使用OracleBulkCopy)之前验证每行数据,并用Excel文件表中的任何无效数据字段通知用户

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

正如我在主要问题中所提到的,我们可以为
数据表中的
数据列
分配
数据类型
,如下所示:

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文件表如下:

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))
});
第1列------------------第2列------------------第3列

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

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

ijklm------------------------------------------67000-----------------2018年1月1日

在上表中,第3行第3列数据为无效日期类型(xyz17-Mar-2018)。执行oda.Fill(dt)时;对于上表,此数据字段将作为null
RowData
添加到
DataTable
。如果导入数据字段的类型不是defined
DataColumn
type,则其他列的情况也一样。因此,我的最后一步是检查
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;
}

那么包含数字的字符串呢?说WD40?您希望在该实例中输入什么?Hi Jon,'WD40'作为字符串就可以了。但不应允许整个数值并引发异常。您可以使用正则表达式筛选数据。添加一个函数,在该函数中传递列值并返回true/false,并基于返回继续或替换该列。请参阅链接-u plz能否显示如何将上述值添加到datatable列的代码?嗨,Ajay,使用正则表达式是一种解决方案。但我发现可以从DataTable本身进行验证。谢谢。你好,丹尼夫,谢谢你的回复。在向
数据表添加行时,我使用以下实现<代码>使用(OleDBDataAdapter oda=新的OleDBDataAdapter(“从[excel_sheet]”,excel_con中选择*){oda.Fill(dt);}
然后我使用“OracleBulkCopy”将
数据表中的数据立即添加到我的数据库中。因此,在向
DataTable
添加数据时,我需要进行验证。我如何才能做到这一点?将数据读入一个临时数据结构,如字典。然后使用验证。或者只使用现有的数据表dt并执行linq select以消除数值1。我看不到正在抛出异常或错误消息?2.你是如何按照你原来的帖子删除数值的?3.你的“真”总是假的。