【发布时间】:2022-08-19 17:38:51
【问题描述】:
无论我如何尝试初始化它,我的 DataRow 对象都是空的。这是源代码:
private DataTable ReadFileIntoDb(MemoryStream file)
{
file.Position = 0;
var sr = new StreamReader(file,Encoding.GetEncoding(1251),true);
var dt = new DataTable();
Console.WriteLine(\"datatable success\");
dt.Columns.Add(new DataColumn(\"description\", typeof(String)));
dt.Columns.Add(new DataColumn(\"code\", typeof(String)));
dt.Columns.Add(new DataColumn(\"cardnumber\", typeof(String)));
dt.Columns.Add(new DataColumn(\"costcentrecode\", typeof(int)));
dt.Columns.Add(new DataColumn(\"costcentre\", typeof(String)));
dt.Columns.Add(new DataColumn(\"article_description\", typeof(String)));
dt.Columns.Add(new DataColumn(\"trans_date\", typeof(DateTime)));
dt.Columns.Add(new DataColumn(\"article_price\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"article_quantity\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"netto\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"brutto\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"mwst\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"beleg\", typeof(Double)));
dt.Columns.Add(new DataColumn(\"oberverkaufsgruppe\", typeof(int)));
dt.Columns.Add(new DataColumn(\"house\", typeof(String)));
dt.Columns.Add(new DataColumn(\"id\", typeof(String)));
//1. row gets skipped
string line = sr.ReadLine();
Console.WriteLine(\"line contains:\" + line);
line = sr.ReadLine();
do
{
string[] itemArray = line.Split(\';\');
DataRow row = dt.NewRow();
row.ItemArray = itemArray; //doesnt work and throws ArgumentException
itemArray.CopyTo(row.ItemArray, 0); //doesnt work either
for (int i = 0; i < 14; i++) //also doesnt work and leaves it empty
{
row.ItemArray[i] = itemArray[i];
Console.WriteLine(row.ItemArray[i]);
}
row[\"id\"] = Guid.NewGuid().ToString();
row[\"house\"] = \"\";
dt.Rows.Add(row);
line = sr.ReadLine();
} while (!string.IsNullOrEmpty(line));
读取文件到数据库获取 csv 文件的内容作为参数。现在我将 csv 内容减少到只有两行,其中一行只是标题。内容看起来像这样并成功解析为变种:Bewohner;1102284;1102284;42600;ASG ROT;Menü (Inklusivleistung);01.07.2022;0;1;;;;;2000003
如您所见,该文件包含 14 个元素,其中一些是空的。我的 DataTable 还包含我在代码中设置的 14 列和 2 个附加列,但是它们的值并非来自 csv。 执行数据库操作后,我的表仍然为空,因为我相信 row.ItemArray 始终为空,因此没有任何内容添加到数据库中。但我不明白为什么它一直是空的以及为什么我得到一个 ArgumentException。源数组 itemArray 不为空,长度也为 14。那么,如果 row.ItemArray 的长度更大,为什么会抛出异常?它有 16 个。
-
您的参数例外中有任何详细信息吗?
-
是的,它说以下内容:数组大于表中的列数。在我看来,这根本不是真的,或者至少我已经检查并得出了不同的结论。该表包含 16 列。 row.ItemArray 的长度也是 16,而 itemArray 有 14 个元素。因此,iteamArray 或 csv 中的列多于元素
标签: c# database datarow system.data