CSVデータの取込

タグの編集
投稿者 熊造  (社会人) 投稿日時 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
投稿者 葉月  (社会人) 投稿日時 2009/3/10 07:39:58
はじめまして。よろしくお願いします。
SQLは苦手なので目を通していませんが、エラーの内容はプログレスバーなどGUIに経過を伝えるようにすれば出なくなるようです。

VS2005以降をお使いでしたら以下のサイトが参考になるかも知れません。

http://www.atmarkit.co.jp/fdotnet/dotnettips/436bgworker/bgworker.html
投稿者 熊造  (社会人) 投稿日時 2009/3/10 18:12:52
葉月さん ありがとうございます。

紹介していただいたサイトを参考に作り直しうまく動作する
ようになりました。

投稿者 熊造  (社会人) 投稿日時 2009/3/10 21:03:56
Accessのmdbで試してうまくいったのでさぁ本番のSqlServerに接続先を変更
そしたら
 呼び出しのターゲットが例外をスローしました。

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmPostDl 'ここで止まります。
    Inherits System.Windows.Forms.Form

    'フォームがコンポーネントの一覧をクリーンアップするために dispose をオーバーライドします。
    <System.Diagnostics.DebuggerNonUserCode()> _


データは15件ほど入っております。
原因がさっぱり コードの部分どこを掲載していいのかわからにのでエラーの出た部分のみです。

ご教授お願いします。
投稿者 葉月  (社会人) 投稿日時 2009/3/11 06:16:12
何という例外が出ましたでしょうか?
例外の名称が、解決の糸口になります。

といつつ……
SQL関連のエラーぽいので、他の方にお任せします。
投稿者 るきお  (社会人) 投稿日時 2009/3/11 06:51:14
こんにちは。

葉月さんのおっしゃるようにまずは何の例外が出たか教えてください。
現状では情報が少なくて有効な回答はできないです。
投稿者 熊造  (社会人) 投稿日時 2009/3/11 18:06:06
エラーの内容は
TargetInvocationExceptionはハンドルされませんでした。
呼び出しのターゲットが例外をスローしました。
とでます。

データは15-30件位追加されています。 毎回追加できる件数は違っています。

<Global.Microsoft.VisualBasic.CompilerServices.DesignerGenerated()> _
Partial Class frmPostDl 【ここで止まってしまいます。】
    Inherits System.Windows.Forms.Form

ここにコードはなにも書いていません。

もっとなにかポイントとなることを書きたいのですがなにがポイントとなるのかわからず
有効な情報がだせないのでもうしわけありませんがよろしくお願いします。
投稿者 るきお  (社会人) 投稿日時 2009/3/11 21:45:27
例外発生時にInnerExceptionがどうなっているかは確認できますか?
投稿者 熊造  (社会人) 投稿日時 2009/3/12 02:28:14
>例外発生時にInnerExceptionがどうなっているかは確認できますか? 
すみません いろいろ調べてはみたのですが確認する方法がわかりません
投稿者 熊造  (社会人) 投稿日時 2009/3/12 03:13:12
SqlServerに新しくテーブルを作り VBも新しくフォームを作って実行したところ
正常に動きました。 
るきおさん 葉月さん ありがとうございました。