0

selectクエリに問題があります。私の目的は、Excelシートでいくつかの列を選択し、それらをSQLテーブルにコピーすることです。コピーする列が6つあります。ID列が原因で変更された注文をコピーしようとしたとき。

これが私のコードです。

  string path = Server.MapPath(Session["excel_sheet"].ToString());
        //Create connection string to Excel work book
        string excelConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties=Excel 12.0;Persist Security Info=False";
        //Create Connection to Excel work book
        OleDbConnection excelConnection = new OleDbConnection(excelConnectionString);
        //Create OleDbCommand to fetch data from Excel
        OleDbCommand cmd2 = new OleDbCommand("Select [column_1],[column_2],[column_3],[column_4],[column_5],[column_6] from [Sheet1$]", excelConnection);
        excelConnection.Open();
        OleDbDataReader dReader;
        dReader = cmd2.ExecuteReader();
        SqlBulkCopy sqlBulk = new SqlBulkCopy(con);
        //Give your Destination table name
        sqlBulk.DestinationTableName = "MYtable";
        sqlBulk.WriteToServer(dReader);
        excelConnection.Close();

私のテーブルには、このidentity_column、column_1、column_2、column_3、column_4、column_5、column_6のような列があります。

たとえば、Excelのcolumn_4文字列のコピーがsql column_3に書き込んだ後、column_4に書き込む必要があります。私は答えを待っています

4

2 に答える 2

0

SqlBulkCopyクラスのColumnMappingsプロパティを使用する必要があります。

例:

sqlBulk.ColumnMappings.Add("column_1", "column_1");

sqlBulk.DestinationTableName = "MYtable";
于 2012-08-03T14:42:51.023 に答える
0

列を反復してマップできます。これにより、Excel の列名が接続内の同じ名前にマップされます (つまり、Excel column_1 = sql column_1)。

    SqlBulkCopy sqlBulk = new SqlBulkCopy(con);
       //Define column mappings 

    for (int i = 0; i < dReader.FieldCount; i++)
    {
        sqlBulk.ColumnMappings.Add(dReader.GetName(i), dReader.GetName(i));
     }
于 2012-08-03T15:36:37.437 に答える