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

ネットワークトラブル時のDataSetの内容は?

分類:[.NET]

SQLServerをDataSetで読出し更新しています。
画面からデータ入力中にネットワークのトラブルが発生して接続が一旦切れて
しまった場合、回線復旧後に再接続し、DataSetに更新した内容をそのまま更新
することってできるのでしょうか?もし可能ならば方法をご指導ください。
よろしくお願いします。
できます。
Datasetはサーバのレコードをロックしているわけではないので出来ない理由はありません。
トランザクションを切って、更新に失敗したらとりあえずロールバックするというのがわかりやすいかもしれません。

SQL Serverにデータを格納(手動トランザクション)
http://www.athomejp.com/goldfish/vcs/sqlsetdata.asp
■No12812に返信(trapemiyaさんの記事)
> トランザクションを切って、更新に失敗したらとりあえずロールバックするというのがわかりやすいかもしれません。
>
> SQL Serverにデータを格納(手動トランザクション)
> http://www.athomejp.com/goldfish/vcs/sqlsetdata.asp

ご返事ありがとうございます。
行いたいことは、せっかく入力したデータなのでできる限りは捨てずにDB更新したいのです。
回線がトラブルを起こした場合、DataSourceは、無効にならないものなのでしょうか。
全く見当違いの考え方をしているのか、意見をお聞かせください。

通常DBからDataSetにDataをSelectして、DataSetに更新をかけています。
Updateの前に、回線がトラブッた場合で、更新がエラーになれば、
一旦ロールバックします(正常にできるかどうかわかりませんが)。
その後、それまで使っていたコネクションもすべて一旦クローズ・開放します。
 再度コネクションの再作成から行い、接続できなければ終了するしか
ないと思いますが、そこで接続できたとしたら、入力したデータをDBに反映
したいと思います。
そうした場合、コネクションを新しくした場合、データセットも新しくSelect
し直すとすると、トラブル前に編集していたDataSetを使ってUpdateすることは
できなくなるのではと思っていました。
データを捨てずに更新内容をDBに反映させる事ができるとしたら、どうすれば
可能でしょうか。
再コネクションと同時に、新しい別のDataSetを作成し、それまで使用していた
DataSetから新しく作成したDataSetに更新情報を編集しなおすようにすれば
可能という事でしょうか?
皆さんはこのような場合どう対処されているのでしょうか?
えっと、ADO.NETの概念を確認された方が良いと思います。

DataSetはDataTableの集合を管理しているものです。ADO.NETは非接続型なので、データベースからDataTableに値を取り終わると、データベースへの接続はそこで切れます。DataTableはクライアントのメモリに存在するテーブルです。
クライアントは、アプリケーションでこのメモリに存在するテーブルであるDataTableをいじることになります。

一通り編集し終わって、データベースに更新しにいく場合は、このDataTableの値で更新しにいきます。この時に、またデータベースの接続に行きます。
更新中に接続が切れた場合、トランザクションを切っていない場合は、途中まで更新されています。DataTableはそのまま残っていますので、上書きの更新処理であれば、何度でもデータベースへの更新をやり直せます。しかし、挿入があれば、2重に挿入されてしまいます。

この辺りが面倒なので、途中で接続に失敗して更新できなければ、トランザクションでロールバックして、もう一度最初からデータベースの更新をトライした方が堅いと思った次第です。
■No12884に返信(trapemiyaさんの記事)

ご返事ありがとうございます。
ADO.NETについて再度確認し、Tryして見ます。
ご丁寧に説明いただきありがとうございました。

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