tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルDataTableの更新
記事No6423
投稿日: 2007/10/12(Fri) 11:34
投稿者びぎ
こんにちは。

DataTableをCOPYして
INSERTのSqlDataAdapterを実行したいのですが
「HというDataTableは既にこのDataSetに属しています」の
エラーになってしまいます。

  Dim Table As New DataTable("J")
  Table = mDs.Tables("H").Copy
  mDs.Tables.Add(Table)
   '*************************************************************
   mCn.Open()
    Dim tran As SqlClient.SqlTransaction = mCn.BeginTransaction()
   HeadDA.InsertCommand.Transaction = tran
   HeadDA.Update(mDs, "H")
    
   JnlDA.InsertCommand.Transaction = tran
   JnlDA.Update(mDs, "J")

 コードは上記の通りですが
 DataTable("H") を "J"という名前にして更新したいのですが
 どのようにしたらよいのか教えて頂けないでしょうか?

 よろしくお願いします。

[ツリー表示へ]
タイトルRe: DataTableの更新
記事No6427
投稿日: 2007/10/12(Fri) 15:21
投稿者るしぇ
これはローカルで作成した DataTable について限定した話でしょうか?

[DataAdapter.Update メソッド]
http://msdn2.microsoft.com/ja-jp/library/system.data.common.dataadapter.update.aspx
> 挿入行、更新行、または削除行に対して、INSERT、UPDATE、または DELETE ステートメントを
>個別に呼び出します。
日本語が難しいですが、行を挿入したり削除したりするメソッドではありません。
既に DataTable に対して変更が行われた挿入行、更新行、または削除行の情報を
DataAdapter 内のデータベースに対する接続情報を利用して、対象のデータベースへ
変更処理を試みるメソッドです。
ただし、更新なら UpdateCommand 挿入なら InsertCommand に更新に有効なSQL文
(UpdateCommand には Update 文、InsertCommand には Insert 文である必要があります)
が設定されている必要があり、失敗してもエラー表示されない場合が多いという、やっかい
な部分です。

最終的な目的がデータベースの更新なら、素直に SQL 文を文字列編集で作成することを
お勧めします。

ローカルの DataTable に行を追加するだけなら、DataTable を直接操作してください。
[DataTable.NewRow メソッド]
http://msdn2.microsoft.com/ja-jp/library/system.data.datatable.newrow(VS.80).aspx

[ツリー表示へ]
タイトルRe^2: DataTableの更新
記事No6432
投稿日: 2007/10/12(Fri) 16:39
投稿者びぎ
ありがとうございます。

最終目的はSQLServerへの更新です。

SQL 文を文字列編集で作成することをお勧めします。

とありますが、その理由は

DataAdapter は失敗してもエラー表示されない場合が多いという、やっかい
な部分です。

ということなのでしょうか?

[ツリー表示へ]
タイトルRe^2: DataTableの更新
記事No6434
投稿日: 2007/10/12(Fri) 19:22
投稿者るしぇ
>>SQL 文を文字列編集で作成することをお勧めします。
>とありますが、その理由は
>>DataAdapter は失敗してもエラー表示されない場合が多いという、やっかい
>>な部分です。
>ということなのでしょうか?
ろくにテストしない似非技術者に対してはそうでしょうね。ただ、通常はテスト項目の
一覧を作成してテストしますから、エラーは表示されなくてもデータが更新されない
という結果が出るので問題はありません。

エラーが出ないので、『分からない』と質問する人が多いという意味で、やっかいな
部分ですが、一度知識を得ていれば問題ないはずですよね。

>>SQL 文を文字列編集で作成することをお勧めします。
その理由は、結局同じ結論に至るからです。ADO.NET で非接続型になったため、[VB6.0]
時代にできた、SQL 文の実行結果の一部に連動してデータベースを更新することが
できません。InsertCommand などに有効な SQL 文を設定する必要がある事は書きました。
この時点で直接データベースに SQL を投げればいいでしょ?
[DataAdapter.Update メソッド]自体に意味が無いと思うんです。あるとすれば
InsertCommand などの自動生成か、ウィザードを使ったような場合だと思います。

しかし、どちらも自由度に制限があり、レベルの高い操作に対応できません。そこで壁に
ぶつかって、やっぱり自分で SQL を編集するようになるため、最初からデータベースと
SQL を勉強して、自作することを早く覚えるようにお勧めしています。

[ツリー表示へ]
タイトルRe^3: DataTableの更新
記事No6445
投稿日: 2007/10/15(Mon) 12:01
投稿者びぎ
るしぇさん、大変丁寧なご回答ありがとうございました。

[ツリー表示へ]