将CSV上传到SQL Server时,“给定的ColumnMapping与源或目标中的任何列都不匹配”

时间:2018-09-02 13:14:25

标签: c# sql-server csv windows-services ssms

我正在尝试通过将CSV转换为Datatable然后将该Datatable插入SQL数据服务器来将CSV上载到SQL Server。 CSV已正确读取到Datatable中,但是在将数据插入SQL时会发生此错误

  

“给定的列映射与列表中的任何列都不匹配   来源或目的地”

这是我的代码:

static void InsertDataIntoSQLServerUsingSQLBulkCopy(DataTable csvFileData)
    {
        System.IO.File.Create("C:\\Users\\Rana\\Desktop\\inside.txt");
        using (SqlConnection dbConnection = new SqlConnection("Data Source=DESKTOP-N7OIK1O\\MSSQLSERVER02;Initial Catalog=nokia_Alarm;Integrated Security=SSPI;"))
        {
            System.IO.File.Create("C:\\Users\\Rana\\Desktop\\inside1.txt");
            dbConnection.Open();
            using (SqlBulkCopy s = new SqlBulkCopy(dbConnection))
            {
                System.IO.File.Create("C:\\Users\\Rana\\Desktop\\inside2.txt");
                s.DestinationTableName = "csv_Table";

                foreach (var column in csvFileData.Columns)
                    s.ColumnMappings.Add(column.ToString(), column.ToString());
                s.WriteToServer(csvFileData);
                System.IO.File.Create("C:\\Users\\Rana\\Desktop\\inside4.txt");
            }
        }
    }

我不知道问题出在哪里?

是在数据库连接中吗?

  

(SqlConnection dbConnection = new SqlConnection(“ Data   源= DESKTOP-N7OIK1O \ MSSQLSERVER02;初始   Catalog = nokia_Alarm; Integrated Security = SSPI)

1 个答案:

答案 0 :(得分:1)

应该是:

foreach (DataColumn column in csvFileData.Columns)
                    s.ColumnMappings.Add(column.ColumnName, column.ColumnName);

DataTables和大多数ADO.NET类型早于通用集合,因此在foreach对其集合(如DataTable.Columns)进行访问时,必须在foreach中提供目标类型以访问其属性。和方法。