繁体   English   中英

SQL批量复制“使用ASP.NET无法将数据源中String类型的给定值转换为指定目标列的类型日期时间”

[英]SQL Bulk Copy “The given value of type String from the data source cannot be converted to type datetime of the specified target column” using ASP.NET

我正在研究ASP.NET MVC4项目,我正在尝试使用SQL批量复制将数据从xlsx文件(Excel 2010文件)导出到我的数据库。 我的Excel文件只包含2列:第一列包含数字(从1到25),第二列包含字符(连续系列“a,b,c”)

这是我尝试导出数据的方法,但是我收到错误“数据源中String类型的给定值无法转换为指定目标列的int类型”

public ActionResult Bulk()
{    
    string xConnStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Users\maarab\Documents\BulkCopy.xlsx;Extended Properties=Excel 12.0;";
    using (OleDbConnection connection = new OleDbConnection(xConnStr))
    {
        OleDbCommand command = new OleDbCommand("Select * FROM [Sheet1$]", connection);
        connection.Open();    
        string dbConnection = ((EntityConnection)db.Connection).StoreConnection.ConnectionString;

        // Create DbDataReader to Data Worksheet
        using (DbDataReader dr = command.ExecuteReader())
        {
            using (var bulkCopy = new SqlBulkCopy(dbConnection))
            {    
                bulkCopy.DestinationTableName = "bm_test" 
                bulkCopy.WriteToServer(dr); //here I got the error    
            }
        }

        return RedirectToAction("Index");
}

是什么导致这个错误?

如果DataTable的列顺序与数据库中表定义的列顺序不同(当这会导致类型或长度不兼容时),则SqlBulkCopy.WriteToServer(DataTable)因混淆消息而失败。 显然, WriteToServer方法不映射列名。

我一直在抱怨这个,直到我手动设置订单,如下所示:

SqlBulkCopy sbc = new SqlBulkCopy(ConnectionString, SqlBulkCopyOptions.UseInternalTransaction);
sbc.DestinationTableName = "agSoilShapes";
sbc.ColumnMappings.Add("Mukey", "Mukey");
sbc.ColumnMappings.Add("Musym", "Musym");
sbc.ColumnMappings.Add("Shapes", "Shapes");

DataTable dt = new DataTable();
dt.Columns.Add("Mukey", typeof(SqlInt32));
dt.Columns.Add("Musym", typeof(SqlString));
dt.Columns.Add("Shapes", typeof(SqlGeometry));

感谢其他人(@subsci)发表评论,引导我走向这个方向:)

我在使用EntityFramework.BulkInsert包时收到了类似的错误。 在这种情况下,根本原因是数据库表列和生成的模型元数据列(数据库优先)之间的顺序不匹配。

DataTable Columns顺序和Database表的列顺序应该相同。 它更新了表列的顺序后起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM