SqlBulkCopy - The given value of type String from the data source cannot be converted to type money of the specified target column

后端 未结 8 1864
慢半拍i
慢半拍i 2020-11-30 03:08

I\'m getting this exception when trying to do an SqlBulkCopy from a DataTable.

Error Message: The given value of type String from the data source cannot be c         


        
相关标签:
8条回答
  • 2020-11-30 03:33

    Since I don't believe "Please use..." plus some random code that is unrelated to the question is a good answer, but I do believe the spirit was correct, I decided to answer this correctly.

    When you are using Sql Bulk Copy, it attempts to align your input data directly with the data on the server. So, it takes the Server Table and performs a SQL statement similar to this:

    INSERT INTO [schema].[table] (col1, col2, col3) VALUES
    

    Therefore, if you give it Columns 1, 3, and 2, EVEN THOUGH your names may match (e.g.: col1, col3, col2). It will insert like so:

    INSERT INTO [schema].[table] (col1, col2, col3) VALUES
                              ('col1', 'col3', 'col2')
    

    It would be extra work and overhead for the Sql Bulk Insert to have to determine a Column Mapping. So it instead allows you to choose... Either ensure your Code and your SQL Table columns are in the same order, or explicitly state to align by Column Name.

    Therefore, if your issue is mis-alignment of the columns, which is probably the majority of the cause of this error, this answer is for you.

    TLDR

    using System.Data;
    //...
    myDataTable.Columns.Cast<DataColumn>().ToList().ForEach(x => 
        bulkCopy.ColumnMappings.Add(new SqlBulkCopyColumnMapping(x.ColumnName, x.ColumnName)));
    

    This will take your existing DataTable, which you are attempt to insert into your created BulkCopy object, and it will just explicitly map name to name. Of course if, for some reason, you decided to name your DataTable Columns differently than your SQL Server Columns... that's on you.

    0 讨论(0)
  • 2020-11-30 03:34

    Make sure that the column values u added in entity class having get set properties also in the same order which is present in target table.

    0 讨论(0)
提交回复
热议问题