c#-给定的ColumnName'xxxxxxx'与数据源中的任何列都不匹配

时间:2019-02-07 23:56:11

标签: sqlbulkcopy

在我的代码中有一个问题,但是我看不到这个问题。列名是一个单词一个单词,并且可以正常工作,如果我在csv文件中使用1列,但是当我尝试更多时,则使用2-3列字段,则出现以下错误。我已经阅读了很多文章,因此无法修复错误。这行可能会发生什么。数据库已经使用类似的字段创建。

private void DBaktar()
    {


        string SQLServerConnectionString = "Server =.\\SQLEXPRESS; Database = Qiti; User Id = sa; Password = 7731231xx!!;";
        string CSVpath = @"D:\FTP\"; // CSV file Path
        string CSVFileConnectionString = String.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};;Extended Properties=\"text;HDR=Yes;FMT=Delimited\";", CSVpath);

        var AllFiles = new DirectoryInfo(CSVpath).GetFiles("*.CSV");
        string File_Name = string.Empty;

        foreach (var file in AllFiles)
        {
            try
            {


                DataTable dt = new DataTable();

                using (OleDbConnection con = new OleDbConnection(CSVFileConnectionString))
                {
                    con.Open();
                    var csvQuery = string.Format("select * from [{0}]", file.Name);
                    using (OleDbDataAdapter da = new OleDbDataAdapter(csvQuery, con))
                    {
                        da.Fill(dt);
                    }
                }

                using (SqlBulkCopy bulkCopy = new SqlBulkCopy(SQLServerConnectionString))
                {
                    bulkCopy.ColumnMappings.Add("LKod", "LKod");
                    bulkCopy.ColumnMappings.Add("info", "info");
                    bulkCopy.ColumnMappings.Add("Codex", "Codex");
                    bulkCopy.ColumnMappings.Add("LthNo", "LthNo");
                    bulkCopy.ColumnMappings.Add("Datein", "Datein");


                    bulkCopy.DestinationTableName = "U_Tik";
                    bulkCopy.BatchSize = 0;
                    bulkCopy.EnableStreaming = true;

                    bulkCopy.WriteToServer(dt);
                    bulkCopy.Close();
                }

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }

        }

错误异常;

  

给定的ColumnName'LKod'与数据中的任何列都不匹配   来源。

ex.StackTrace;

  在

  System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerCommon(Int32   columnCount)在   System.Data.SqlClient.SqlBulkCopy.WriteRowSourceToServerAsync(Int32   columnCount,CancellationToken ctoken)   System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable表,   DataRowState rowState)位于   System.Data.SqlClient.SqlBulkCopy.WriteToServer(DataTable表)

2 个答案:

答案 0 :(得分:0)

一些信息可以在这里找到:https://sqlbulkcopy-tutorial.net/columnmapping-does-not-match

原因

  • 您未提供任何ColumnMappings,并且源中的列多于目标中的列。
  • 您为源提供了无效的列名。
  • 您为目的地提供了无效的列名。

解决方案

  • 确保提供ColumnMappings
  • 确保源列名称的所有值均有效且区分大小写。
  • 确保目标列名称的所有值均有效且区分大小写。
  • 使源代码不区分大小写

答案 1 :(得分:0)

我找到了一个解决方案,并且100%正确地工作。.下面的链接,希望成为需要它的人。

https://johnnycode.com/2013/08/19/using-c-sharp-sqlbulkcopy-to-import-csv-data-sql-server/