Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.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# SQL批量复制到单独的表中_C#_Generics_Sqlbulkcopy - Fatal编程技术网

C# SQL批量复制到单独的表中

C# SQL批量复制到单独的表中,c#,generics,sqlbulkcopy,C#,Generics,Sqlbulkcopy,我想在不同的表中执行insert到数据库中。我文件中的每个记录都分配有表标识符,表标识符将用作键。现在我所做的是使其成为一种通用方法,我又创建了一个file.txt,在其中我用表名指定了所有标识符。并将其存储到字符串字典中,字符串 因此,我的字典中有如下示例: 表标识符,表名称 表标识符,表名称 然后,我创建了另一个string-as-key字典(注意:我使用了前面的字典值作为这个字典的键)和string-as-value列表来获取表名的列名 所以,不,我的字典里有如下示例数据: 表名,列名IE

我想在不同的表中执行insert到数据库中。我文件中的每个记录都分配有表标识符,表标识符将用作键。现在我所做的是使其成为一种通用方法,我又创建了一个file.txt,在其中我用表名指定了所有标识符。并将其存储到字符串字典中,字符串

因此,我的字典中有如下示例:

表标识符,表名称

表标识符,表名称

然后,我创建了另一个string-as-key字典(注意:我使用了前面的字典值作为这个字典的键)和string-as-value列表来获取表名的列名

所以,不,我的字典里有如下示例数据:

表名,列名IEnumerable

表名,列名IEnumerable

那么, datafile.txt包含以管道分隔的数据,我将它们拆分并保存到KVP字符串列表和字符串列表中。正如我前面提到的,我的数据文件中有表标识符。因此,我将它们用作KVP中的键,并将分割的值存储到字符串列表中

所以,不,我在我的KVP字符串列表中有如下示例数据,字符串列表:

表标识符,IEnumerable值

表标识符,IEnumerable值

现在做了一半的工作,我陷入了最后一期:

现在,我将所有的标识符、表名、列名和值放入字典和列表中。唯一要做的就是匹配和合并记录并转储它

对于匹配:我想将KVP
s键的列表与dictionary
s键进行匹配,然后使用这些值作为键来获取列名

预期场景图像:

列表[[列表<列名>],[字符串值列表]]

我的代码:

 DataTable dt = null;
    SqlConnection cn = null;
    SqlDataReader dataReader = null;
    SqlBulkCopy bulkInsert = null;
    StreamReader reader = null;
    string path = string.Empty;

  public void test()
    {
        string TableIdentiferFilepath = HttpContext.Current.Server.MapPath("/testfile/TableIdentifer.txt");
        Dictionary<string, string> TableIdentifer_TableName = null;
        Dictionary<string, List<string>> Table_Name_ColumnName = null;

        using (reader = new StreamReader(TableIdentiferFilepath))
        {
            TableIdentifer_TableName = new Dictionary<string, string>();
            Table_Name_ColumnName = new Dictionary<string, List<string>>();
            while (!reader.EndOfStream)
            {
                string[] curr = reader.ReadLine().Split(new string[] { ",", "\r\n" }, StringSplitOptions.None);
                TableIdentifer_TableName.Add(curr[0], curr[1]);
                using (cn = new SqlConnection(ConString.Connection.conn))
                {
                    cn.Open();
                    if (cn.State == ConnectionState.Open)
                    {
                        string query = string.Format("select column_name from information_schema.columns where table_name = '{0}' order by ordinal_position", curr[1].ToString());
                        using (SqlCommand cmd = new SqlCommand(query))
                        {
                            using (SqlDataAdapter da = new SqlDataAdapter(query, cn))
                            {
                                using (dt = new DataTable())
                                {
                                    da.Fill(dt);
                                    List<string> dataColumns = dt.AsEnumerable().Select(r => r.Field<string>("column_name")).ToList();
                                    Table_Name_ColumnName.Add(curr[1], dataColumns);
                                }
                            }
                        }
                    }
                }
            }
        }
        string path = HttpContext.Current.Server.MapPath("/TextFile/DataSample.txt");
        List<KeyValuePair<string, List<string>>> KVPValues = new List<KeyValuePair<string, List<string>>>();

        using (reader = new StreamReader(path))
        {
            while (!reader.EndOfStream)
            {
                string[] arr = reader.ReadLine().Split(new string[] { "|", "\r\n" }, StringSplitOptions.None);
                var collValues = new List<string>();
                KVPValues.Add(new KeyValuePair<string, List<string>>(arr[0], arr.Skip(1).AsEnumerable().ToList()));

                foreach (var item in TableIdentifer_TableName)
                {
                    foreach (var item2 in Table_Name_ColumnName.Where(c => c.Key == item.Value))
                    {
                        var curr_val = item2.Value;
                        var currKey = KVPValues.Where(p => p.Key == item.Key).ToList();
                    }
                }
            }
        }
    }
DataTable dt=null;
SqlConnection cn=null;
SqlDataReader=null;
SqlBulkCopy bulkInsert=null;
StreamReader=null;
字符串路径=string.Empty;
公开无效测试()
{
字符串TableIdentiferFilepath=HttpContext.Current.Server.MapPath(“/testfile/TableIdentifer.txt”);
Dictionary TableIdentifer_TableName=null;
字典表\u Name\u ColumnName=null;
使用(读卡器=新的StreamReader(TableIdentiferFilepath))
{
TableIdentifer_TableName=新字典();
表_Name_ColumnName=新字典();
而(!reader.EndOfStream)
{
字符串[]curr=reader.ReadLine().Split(新字符串[]{“,”,“\r\n”},StringSplitOptions.None);
TableIdentifer_TableName.Add(curr[0],curr[1]);
使用(cn=newsqlconnection(consting.Connection.conn))
{
cn.Open();
if(cn.State==ConnectionState.Open)
{
string query=string.Format(“从信息_schema.columns中选择列_name,其中表_name='{0}'按顺序_位置排序”,curr[1].ToString());
使用(SqlCommand cmd=newsqlcommand(query))
{
使用(SqlDataAdapter da=newsqldataadapter(查询,cn))
{
使用(dt=newdatatable())
{
da.填充(dt);
List dataColumns=dt.AsEnumerable().选择(r=>r.Field(“column_name”)).ToList();
表\u Name\u ColumnName.Add(curr[1],dataColumns);
}
}
}
}
}
}
}
string path=HttpContext.Current.Server.MapPath(“/TextFile/DataSample.txt”);
List KVPValues=新列表();
使用(读卡器=新的StreamReader(路径))
{
而(!reader.EndOfStream)
{
字符串[]arr=reader.ReadLine().Split(新字符串[]{“|”,“\r\n”},StringSplitOptions.None);
var collValues=新列表();
添加(新的KeyValuePair(arr[0],arr.Skip(1).AsEnumerable().ToList());
foreach(TableIdentifer_TableName中的变量项)
{
foreach(表_Name_ColumnName.Where(c=>c.Key==item.Value)中的var item2)
{
var curr_val=项目2.值;
var currKey=KVPValues.Where(p=>p.Key==item.Key).ToList();
}
}
}
}
}

这是一幅大图!希望现在人们能理解我想要实现的目标。

这是不是很难理解或无法帮助:D??不,你问的问题不清楚,这个问题太冗长了,很难看出这是一个对SO来说有效的问题,还是应该转移到代码审查中。为了简化这一点,我想我不需要在这里解释这个故事,我只需要解释一下我需要的。@PanagiotisKanavos善意地核实一下它比以前好还是坏?老实说,我想问你想解决什么问题(大问题)。也许你的解决方案太复杂了,因为你试图用错误的方式解决它。。。