5

SQLバルクコピーを使用して、SQLServerテーブルに約1,000万行を挿入しています。

7400000の挿入後に、この例外を受け取りました。

リンクサーバー'(null)'のOLEDBプロバイダー'STREAM'が、列' [!BulkInsert].Amount'に対して無効なデータを返しました。

これが解決できるかどうかお知らせください。

メモリリークの問題もあります。

以下は私たちのコードです:

try
{
            using (SqlConnection SQlConn = new SqlConnection(Common.SQLConnectionString))
            {                   
                DataTable dt1 = FillEmptyDateFields(dtDestination);

                //SqlTableCreator ObjTbl = new SqlTableCreator(SQlConn);

                //ObjTbl.DestinationTableName = DestinationTable;

                using (System.Data.SqlClient.SqlBulkCopy bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn,SqlBulkCopyOptions.TableLock,null))
                {

                    //bulkCopy = new System.Data.SqlClient.SqlBulkCopy(SQlConn);
                    bulkCopy.DestinationTableName = DestinationTable;
                    bulkCopy.BulkCopyTimeout = 0;
                    bulkCopy.BatchSize = dt1.Rows.Count; // Batch Size Added.
                    Logger.Log("DATATABLE FINAL :" + dt1.Rows.Count.ToString(), Logger.LogType.Info);
                    if (SQlConn.State == ConnectionState.Closed || SQlConn.State == ConnectionState.Broken)
                        SQlConn.Open();
                    bulkCopy.WriteToServer(dt1);
                    SQlConn.Close();
                    SQlConn.Dispose();
                    bulkCopy.Close();
                    if (bulkCopy != null)
                    {
                        ((IDisposable)bulkCopy).Dispose();
                    }                        
                }
                dt1.Dispose(); 
                dt1 = null;                           
            }

            dtDestination.Dispose();
            System.GC.Collect();
            dtDestination = null;                

}
catch (Exception ex)
{
    Logger.Log(ex, Logger.LogType.Error);
    throw ex;
}
4

2 に答える 2

0

コードに基づいて、BatchSize をデータテーブルのサイズ、おそらく 1,000 万行に設定しているように見えます。5000 などの値を使用してみてください。

于 2012-10-11T14:07:57.677 に答える
0

おそらく、浮動小数点フィールドに NaN 値を挿入しようとしているからでしょうか?

最近この問題が発生しました。何が問題なのかを突き止めるために、データ型が NVARCHAR(MAX) であるテーブルにすべてを挿入したところ、1 つの値が NaN であることに気付きました。

于 2014-03-04T09:09:22.600 に答える