C# 在内存中的表之间复制列
我处理C# 在内存中的表之间复制列,c#,.net,datatable,copy,C#,.net,Datatable,Copy,我处理.csv文件中的数据 该处理从csv中包含的元素在内存中构建一个表。 然后使用SQLINSERT语句处理该表,以使用(新)值填充数据库它包含 它适用于数据库中的所有数据 我想做的是保留选择这些导入器列的可能性,其他列保持不变 为此,我的想法是创建一个中间表,它将是来自数据库的初始表和基于csv文件元素构建的导入表之间的混合 我有所有的元素 一个列表,其中包含选定要导入的列的索引。中间表ResultDatatable最初与我的数据库完全相同。导入的表ImportedTable符合csv的
.csv
文件中的数据
该处理从csv中包含的元素在内存中构建一个表。
然后使用SQLINSERT
语句处理该表,以使用(新)值填充数据库它包含
它适用于数据库中的所有数据
我想做的是保留选择这些导入器列的可能性,其他列保持不变
为此,我的想法是创建一个中间表,它将是来自数据库的初始表和基于csv文件元素构建的导入表之间的混合
我有所有的元素
一个列表
,其中包含选定要导入的列的索引。中间表ResultDatatable
最初与我的数据库完全相同。导入的表ImportedTable
符合csv的元素
我不能用导入表中的列替换中间表中的列
我想做这样的事情:
for (int i = 0; i < MonDataSet.Tables[0].Columns.Count; i++) // Colonnes de la table de la BD
{
if (Choix_Columns.Contains(i)) // Test si l'index des colonnes existe dans la liste de sélection
{
for (int j = 0; j < MonDataSet.Tables[0].Rows.Count; j++)// Lignes de la table de la BD
{
ResultDatatable.Columns[i].Rows[j] = ImportedTable.Columns[i].Rows[j]; // Je remplis la table intermédiaire des valeurs de la table importée
}
}
}
谢谢你的帮助 告诉我你为什么要再这样做?datatable可以记住“before”中的行数据,因此您可以从db下载所有数据,从csv中仅更新部分数据,然后通过询问datarow的原始版本与当前版本来查看差异。它甚至知道每列的值级别-可能是你可以利用这个机制而不是这个中间系统让我看看你为什么要再次这样做?datatable可以记住“before”中的行数据,因此您可以从db下载所有数据,从csv中仅更新部分数据,然后通过询问datarow的原始版本与当前版本来查看差异。它甚至知道每列的值级别—可能是您可以利用此机制,而不是此中间系统
private DataTable Selection_Donnees(DataTable ImportedTable)
{
List<int> Choix_Columns = new List<int>(); // test de liste
Choix_Columns.Add(2);
Choix_Columns.Add(4);
// Initilization
DataTable ResultDatatable = new DataTable();
connexion = CreateConnection();
CreateTable(connexion);
Init_Dataset_Items(); // construction de MonDataset
ResultDatatable = MonDataSet.Tables[0];
for (int i = 0; i < MonDataSet.Tables[0].Columns.Count; i++)
{
if (Choix_Columns.Contains(i))
{
Console.WriteLine(i);
Console.WriteLine(ResultDatatable.Columns[i]);
for (int j = 0; j < MonDataSet.Tables[0].Rows.Count; j++)
{
// Setting.
ResultDatatable.Columns[i]...... I do not know how to do = ImportedTable.Columns[i]..........?? ;
}
}
}
return ResultDatatable ;
}