首页 > 解决方案 > C# DataTable 更新字符串列,格式为 exeption

问题描述

如果在数据表中要更改字符串值,则会导致格式异常,如果写入相同的值则不会。

该问题是在字符串列更改时导入 CSV 文件时引起的。

符合 ISO-8859-1 的 CSV 文件导入行

Original import
|  09.07.2019 |1234567890     |Dies ist ein Test   |          20|Change äü     |01.08.2019|

Update import
|  09.07.2019 |1234567890     |This is a Test   |          20|Final      |03.08.2019|

string[] Lines = File.ReadAllLines(FileNameFull, Encoding.GetEncoding("ISO-8859-1"));

使用 OracleConnection 和 OracleDataAdapter (dotConnect for Oracle) 将第一个文件导入 DataTable 连接

导入工作正常

string[] import_columns = Lines[line_number].Split('|').Select(p => p.Trim()).ToArray();
DataRow current_row= target_table.NewRow();
//abbreviated code for each column, the following is executed
try
{
    switch (target_table.Columns[column_name].DataType.Name)
    {
        case "String":
            current_row[column_name] = import_columns[column_index];
            break;

       //pruned
    }

}
catch (Exception ex)
{
    Console.WriteLine(column_name+ " : " + target_table.Columns[column_name].DataType.Name + " => " + import_columns[column_index].ToString() + " ### " + ex.Message);
    //throw;
}
// after last Column
target_table.Rows.Add(current_row);

但是使用新文件的更新会为所有更改字符串值生成格式异常

string[] import_columns = Lines[line_number].Split('|').Select(p => p.Trim()).ToArray();
DataRow current_row = FindRow(target_table, import_columns);
current_row.BeginEdit();
//abbreviated code for each column, the following is executed
try
{
    switch (target_table.Columns[column_name].DataType.Name)
    {
        case "String":
            current_row[column_name] = import_columns[column_index];
            break;

       //pruned
    }

}
catch (Exception ex)
{
    Console.WriteLine(column_name+ " : " + target_table.Columns[column_name].DataType.Name + " => " + import_columns[column_index].ToString() + " ### " + ex.Message);
    //throw;
}
// after last Column
current_row.EndEdit();

标签: c#stringoracledatatable

解决方案


推荐阅读