- ベストアンサー
PostgreSqlのテーブルをVBから更新
- PostgreSqlのテーブルをVBから更新する際、特定のレコードを取得し、表示内容を変更するボタンを実装したい。レコードが存在しない場合やタイムスタンプに変化がある場合の処理も考える。アップデート文で更新対象になった件数を取得する方法や、フェッチの方法について教えてください。
- PostgreSqlのテーブルをVBから更新する際、特定のレコードを取得し、表示内容を変更するボタンの実装方法について教えてください。また、レコードが存在しない場合やタイムスタンプに変化がある場合の処理についても教えてください。
- PostgreSqlのテーブルをVBから更新する際、特定のレコードを取得して表示内容を変更するボタンを実装したいです。レコードが存在しない場合やタイムスタンプに変化がある場合の処理も行いたいですが、アップデート文で更新対象になった件数を取得する方法やフェッチの方法について教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> Npgsqlではフェッチは使えないのでしょうか? できますよ。 http://msdn.microsoft.com/ja-jp/library/9kcbe65k(v=vs.110).aspx 別にNpgsqlに限った話ではなく、こういうライブラリはよっぽど独自 実装してない限り、大抵DbCommand、DbDataReaderを使うのと一緒です。 継承元クラスを直接利用するならば、 Dim con As NpgsqlConnection ' コネクションがある前提 Dim command As NpgsqlCommand = con.CreateCommand() Dim r As NpgsqlDataReader = command.ExecuteReader() Do While r.Read() Console.WriteLine(r.GetString(0)) Loop r.Close() command.Dispose() こんな感じに。 DB操作がわからないなら、System.Data.Common内のクラスを見るなり、 それぞれのメソッドを見るなり、他サイトでクラスやメソッド単位で調べるなり すれば解決すると思います。 Npgsqlのクラスのほとんどは、このクラスを継承して実装が行われています。 http://msdn.microsoft.com/ja-jp/library/System.Data.Common(v=vs.110).aspx Npgsqlのクラス名を知りたければ、CHMファイルがあります。 http://pgfoundry.org/frs/?group_id=1000140
その他の回答 (2)
- めとろいと(@naktak)
- ベストアンサー率36% (785/2139)
ExecuteNonQuery()は、影響を受けた行数を返すと思いますが。 http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.executenonquery(v=vs.110).aspx キー情報、タイムスタンプを条件に加えた状態でUPDATEを走行させた時、 タイムスタンプが同一ならば1が返されるでしょうし、異なれば 0となるでしょう。 また、存在するかどうかということは上記だけでは分からないので、 SELECTする必要があるでしょう。 ざっくりとした手順としては以下のようになると思います。 画面表示時 1.SELECTして画面を表示。タイムスタンプも保持する。 更新時 1.トランザクション開始 2.タイムスタンプを条件に含まず、行ロックでSELECTして情報を取得。 情報が取得できないならば『誰かが消した』。 3.タイムスタンプも条件に含んで、UPDATEする。 影響結果が0なら『誰かが変更した』、1なら『更新した』 4.COMMIT
- Picosoft
- ベストアンサー率70% (274/391)
> アップデート文で更新対象になった件数を取得する事はできませんか? ExecuteNonQueryメソッドの説明をよく読んでくださいな。 http://www.postgresql.jp/document/NPGSQL/api/Npgsql.NpgsqlCommand.ExecuteNonQuery.html
お礼
ありがとうござます。 よく読んでみました。 戻り値がそうだったのですね。
お礼
ありがとうござます。 Npgsqlではフェッチは使えないのでしょうか?