3

したがって、Excelファイルを取得してDBのテーブルに書き込むための次のコードがあります。

        string target = Server.MapPath("~/Upload");
        if (fupStation.HasFile)
        {
            fupStation.SaveAs(System.IO.Path.Combine(target, fupStation.FileName));

            string connectionString = String.Format(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", target + "\\" + fupStation.FileName); string query = String.Format("select * from [{0}$]", "Client Station Assignments");
            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);

            DataSet dsStation = new DataSet();
            dataAdapter.Fill(dsStation);

            DataTable dtStation = new DataTable();
            dtStation = dsStation.Tables[0];

            gvOne.DataSource = dtStation;
            gvOne.DataBind();

            using (SqlBulkCopy s = new SqlBulkCopy(ConfigurationManager.ConnectionStrings["cnSQL"].ConnectionString))
            {
                s.DestinationTableName = "StationImport";
                s.NotifyAfter = 100;
                s.WriteToServer(dtStation);
                s.Close();
            }

        }

だからここに問題があります。ファイルを読み取り、Datatableに正常にデータを入力します(グリッドにデータを入力することで証明されます)。SQLBulkCopyコードが呼び出されていることはわかっていますが、最終的にはエラーは発生しませんが、テーブルには何も表示されません。

誰かがこれを前に通り抜けましたか?BulkCopyを使用する(そしてファイルを読み取るのも)のはこれが初めてなので、何か間違ったことをしていても驚かないでしょう。

ありがとう

4

2 に答える 2

2

私のコードはvb.netで動作します

datatableとsqlテーブルは、フィールドのデータ型と列の順序で一致する必要があることに注意してください。

    Using connection As SqlConnection = New SqlConnection(conn)
        connection.Open()
        Using bulkCopy As SqlBulkCopy = New SqlBulkCopy(connection, SqlBulkCopyOptions.TableLock, Nothing)
            bulkCopy.DestinationTableName = "TableName"
            bulkCopy.BulkCopyTimeout = 60000
            bulkCopy.BatchSize = 0
            bulkCopy.WriteToServer(MyDataTable)
            bulkCopy.Close()
        End Using
        connection.Close()
    End Using
于 2012-05-04T15:10:37.210 に答える
2

すべての列が正しくマップされていますか?「2つの間に不一致の列がある場合、コピーは成功しません。」(ソースhttp://www.sqlteam.com/article/use-sqlbulkcopy-to-quickly-load-data-from-your-client-to-sql-server

于 2012-05-08T07:32:13.117 に答える