5

ASP.NET MVC4 プロジェクトに取り組んでおり、SQL 一括コピーを使用して xlsx ファイル (Excel 2010 ファイル) からデータベースにデータをエクスポートしようとしています。私の Excel ファイルには 2 つの列しか含まれていません。最初の列には数字 (1 から 25 まで) が含まれ、2 番目の列には文字 (連続する一連の「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");
}

このエラーの原因について何か考えはありますか?

4

4 に答える 4

8

次のように手動で注文を設定するまで、私はこれについて泣き言を言っていました。

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)に感謝します:)

于 2015-03-16T01:58:21.027 に答える