投稿者 熊造  (社会人) 投稿日時 2009/3/10 03:04:57
郵政省の郵便番号一覧(CSV)をダウンロードしてテーブルに追加したいのですが途中でエラーが出てしまいます。
やっていることはCSVをDataTableに読み込んでR_郵便番号に追加しています。
データ件数は12万件位あります。

CLR は、COM コンテキスト 0x113a008 から COM コンテキスト 0x113a178 へ 60 秒で移行できませんでした。
ターゲット コンテキストおよびアパートメントを所有するスレッドが、ポンプしない待機を行っているか、
Windows のメッセージを表示しないで非常に長い実行操作を処理しているかのどちらかです。この状態は通常、
パフォーマンスを低下させたり、アプリケーションが応答していない状態および増え続けるメモリ使用を導く可能性があります。
この問題を回避するには、すべての Single Thread Apartment (STA) のスレッドが、CoWaitForMultipleHandles のようなポンプする
待機プリミティブを使用するか、長い実行操作中に定期的にメッセージをポンプしなければなりません。       

質問ばかりして申し訳ありませんが教えていただけないでしょうか

For i As Integer = 0 To oleTbl.Rows.Count - 1
            Pra1.Value = oleTbl.Rows(i)(0) : Pra2.Value = oleTbl.Rows(i)(1) : Pra3.Value = oleTbl.Rows(i)(2)
            省略
            sqlCom.Parameters.Add(Pra1) : sqlCom.Parameters.Add(Pra2) : sqlCom.Parameters.Add(Pra3)
            省略
            
            sqlCom.CommandText = "INSERT INTO R_郵便番号 ( 団体コード, 旧郵便番号, 新郵便番号, 県カナ, " & _
                                                          "市カナ, 町域カナ, 県, 市, 町域, 一町多番号FLG, " & _
                                                          "小字起番FLG, 丁目FLG, 一番多町FLG, 更新表示, " & _
                                                          "変更事由 ) " & _
                                 "VALUES (@p1,@p2,@p3,@p4,@p5,@p6,@p7,@p8,@p9,@p10,@p11,@p12,@p13,@p14,@p15)"
            sqlCom.ExecuteNonQuery()
            sqlCom.Parameters.Clear()

            frmPostDl.ProgressBar1.Value = i / oleTbl.Rows.Count * 100
            frmPostDl.lblカウント.Text = i + 1
            frmPostDl.Refresh()
 Next