我正在尝试将数据从Excel文件读取到DataTable
。我知道在将列添加到DataTypes
时可以为DataColumn
分配不同的DataTable
。到目前为止,我已经尝试了以下方法,
DataTable dt = new DataTable();
dt.Columns.AddRange(new DataColumn[2]
{
new Datacolumn("column1", typeof(string)),
new DataColumn("column2", typeof(int))
});
我的excel文件在两列中有如下数据,
column1 ------ column2
abc ---------------- 230
def ---------------- 230tr
如上所示,第二行第二列的值为'230tr',DataTable
不应接受带有无效数据字段和行号的引发异常。
Praveena。
答案 0 :(得分:0)
在代码中,要读取要插入的excel值,应使用C#函数:[Int32.TryParse][1]
或float.TryParse
;
它将告诉您字符串是否将转换为浮点数(或整数),在这种情况下,请勿插入。
您可以看到详细的示例/答案here:
答案 1 :(得分:0)
您可以尝试这种方式。
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();
}
答案 2 :(得分:0)
感谢大家的回应,在与DataTables
一起工作时,我为我的问题找到了一个简单的解决方案。我的主要任务是从Excel文件表中读取数据行并验证每行数据,然后再将其添加到我的数据库表中(使用OracleBulkCopy),并将Excel文件表中的任何无效数据字段通知用户。
当我使用DataTable
将数据从Excel文件表导入oda.Fill(dt);
时,我意识到在将数据添加到其中的过程中,某些DataRow
字段为空(空)。 DataTable
。
正如我在上面的主要问题中提到的那样,我们可以按以下方式在DataType
中为DataColumn
分配DataTable
,
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文件如下:
column1 ----------------- column2 ---------------------- column3
abcd ---------------------- 20000 ----------------------- 2018年12月20日
efgh ----------------------- 56500.5 ---------------------- xyz17-Mar-2018
ijklm ----------------------- 67000 ---------------------- -2018年1月1日
上表中的第三行第三列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;
}