DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Datasetから一度にDBへ書き込むには

環境/言語:[WindowsXP,VB,VisualStudio2003,FrameWork1.1,SQL Server2000]
分類:[.NET]

DB1からDatasetにデータを取得
(ここまではカプセル化しており、変更できません)

そのデータをDB2のTableに格納しようとしています。

ループさせて1行ずつセットしていく方法はわかるのですが、
全件一気にinsertすることは可能でしょうか?
(DatasetとTableは同じレイアウトです。)

よろしくお願い致します。
思い付くのはTableAdapterのUpdateメソッドを利用する事です。

Updateメソッドでは、
DataTable、DataSet、DataRow、DataRows、パラメタ渡し
が選べます。

ので、ご希望の一回の実行で更新も可能。
詳しくはここを一度読んでみて下さい。
確か、新規行の場合もUpdateメソッドで自動的にインサートとなったと思います。
(手元に資料がないので不確かで申し訳ないですが)

http://msdn.microsoft.com/ja-jp/library/7zt3ycf2(VS.80).aspx
TableAdapterはFrameWork2.0からの機能みたいです。
上記の通り、今時FrameWork1.1なので・・・
ヒトシさん、レスありがとうございました。
SqlCommandBuilderクラスを使ってみるとか
http://www.atmarkit.co.jp/fdotnet/basics/adonet05/adonet05_02.html
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommandbuilder(VS.80).aspx
やじゅさん、レスありがとうございました。
MSDNのサンプルコードの、FillとUpdateの間の処理がわかりません・・・

myDataAdapter.Fill(ds, myTableName)

myDataAdapter.Update(ds, myTableName)

・dsに、DB1から取得したDatasetを直接入れる
・dsに、DB1から取得したDatasetをCopyメソッドで入れる
を試してみましたが、できませんでした。
@ITのサンプルコードのように、行追加だとループしないとできませんよね?
どのように処理すれば、一気にセットできますでしょうか?
ご教示いただければありがたいです。
C#でスイマセン(場所は忘れましたが、C#からVBに変換するツールがあったと思います)

最悪行き詰ったら自分はDataSetに対してループを回しますね。
----
using System.Text;

StringBuilder sqlUpdate = new StringBuilder();
for(int i = 0 ; i < ds.Tables[0].Rows.Count ; i ++)
{
   sqlUpdate.Append("UPDATE");
   sqlUpdate.Append(" myTableName");
   sqlUpdate.Append(" SET");
   sqlUpdate.Append(" XXX ='" + (string)ds.Tables[0].Rows[i][0] + "'");
   
   try
   {
      //ここにSQLを実行する構文(ExecuteNonQuerryとか)
   }
   catch(Exception)
   {
      //ここに例外処理
   }
   finally
   {
      //ここに各種解放処理
   }
}
---

見よう見まねで上部のコードをVBに直してみましたが、動かない可能性が高いです。

---
Imports System.Text


Dim sqlUpdate As New StringBuilder()
Dim i As Integer
For i = 0 To (ds.Tables(0).Rows.Count) - 1
   sqlUpdate.Append("UPDATE")
   sqlUpdate.Append(" myTableName")
   sqlUpdate.Append(" SET")
   sqlUpdate.Append((" XXX ='" + CStr(ds.Tables(0).Rows(i)(0)) + "'"))
   
   Try
   'ここにSQLを実行する構文(ExecuteNonQuerryとか)
   Catch
   'ここに例外処理
   Finally
   End Try 'ここに各種解放処理
Next i
---
純@WASさん、レスありがとうございました。
いろいろ試してみましたが、うまくいかないので、結局諦めてループにしました。
助言下さった皆さん、ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板