タイトル | : SqlDataAdapterのUPDATEメソッドについて |
記事No | : 490 |
投稿日 | : 2003/10/16(Thu) 11:35 |
投稿者 | : しんじ |
[OSのVer]:Windows2000 [VBのVer]:VB.NET
お世話になっております。 ADO.NETとSQLServer2000でDBを構築しているのですが、 更新ロジックを作成し、DATASET内の保留更新をSqlDataAdapterでINSERT処理しています。 INSERTコマンドにはストアドプロシージャーを使用しています。 バッチ自体は正常に動作しているのですが、1件毎に「成功」「失敗」 「データが存在していおりスキップした」 (ExecuteNonQueryメソッドの戻り値を取得するようなイメージです。) を調べたいのですが方法がわからず悪戦苦闘しております。
SqlDataAdapter.UpdateメソッドにもINTERGER型の戻り値があるのですが、 最終更新時にしか戻ってきません。 下のコードですと「成功」「失敗」は分かりますが、「データが存在しておりスキップした」が分か りませ ん。 ヒントだけでも結構ですので御教授頂けます様よろしくお願い致します。
動作サンプルコード;(実際は嫌になるぐらい長いので掲示板用に要所だけ書きました。 この環境にはSQLServerが無いのでTESTしていません。間違っていたらすみません):
'Imports System.Data.SqlClient を宣言
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) _ Handles Button1.Click
'メインルーチン Dim Cn As SqlConnection = CreateSqlCon _ ("UserId", "Password", "Catalog", "Sourse") Dim da As New SqlDataAdapter() da.InsertCommand = CreateInsertCommand(Cn) 'da.UpdateCommand = CreateUpdateCommand(Cn) 省略 'da.DeleteCommand= CreateDeleteCommand(Cn) 省略
'テスト用データセット作成 Dim ds As New DataSet() Dim tbl As DataTable = ds.Tables.Add("Tbl1") Dim row As DataRow : Dim Col As DataColumn Col = tbl.Columns.Add("test1") Col = tbl.Columns.Add("test2")
'適当にデータセットにデータを入れる Dim i As Integer For i = 1 To 100 row = ds.Tables("Tbl1").NewRow For Each Col In tbl.Columns row(Col) = i Next ds.Tables("Tbl1").Rows.Add(row) Next
'更新する Dim inttestUpdate As Integer inttestUpdate = da.Update(ds, "Tbl1") 'ここのバッチで評価したい が最終時にしか引数が渡されない 'ここに評価ルーチンを入れたいがバッチ中にここまで到達しない。 '現在はFILLエラーイベントでエラーだけ処理しているが、「データが既にある」 '場合SQLServerはエラーを返さないので評価が出来ない。 End Sub
Private Function CreateSqlCon _ (ByVal strUserID As String, ByVal strPWS As String, _ ByVal strCtl As String, ByVal strSou As String) As SqlConnection
'コネクションを作成する Dim Cn As New SqlConnection() Cn.ConnectionString = _ "user id=" & strUserID & ";" & _ "password=" & strPWS & ";" & _ "Initial Catalog=" & strCtl & ";" & _ "Data Source=" & strSou & ";"
Return Cn End Function
Private Function CreateInsertCommand(ByVal Cn As SqlConnection) As SqlCommand
'インサートコマンドを作成する Dim cmdInsert As New SqlCommand("Insert_SutoredProg", Cn) Dim PC As SqlParameter cmdInsert.CommandType = CommandType.StoredProcedure
With cmdInsert.Parameters PC = .Add("@Test1", SqlDbType.BigInt) PC.SourceColumn = "test1" PC = .Add("@Test2", SqlDbType.BigInt) PC.SourceColumn = "test2" 'ストアドプロシージャーの戻りパラメーターで評価できるのであればこれが一番希望です。 'ストアドプロシージャーで Returnで返される値 '-1:エラー ; 0 成功 1:データが既に存在したなど 'PC = .Add("@RetVal", SqlDbType.Int) 'cmdInsert.Parameters("@RetVal").Direction = ParameterDirection.ReturnValue End With
Return cmdInsert End Function
|