VB.netでSQLDataAdapterのSelectにストアドを設定したものがコミットされない。

インサート処理を含むストアドをSelectCommandに設定して投げると、@LogIDでもカウントアップした値がとれ、DataTableに行も取れているのに、データベースにはその行が存在しません。
やらなければいけない処理が抜けていれば教えてください。

コードはこんな感じ
>>
Dim ds As New DataSet
Dim adp As New SqlClient.SqlDataAdapter
adp.SelectCommand = New SqlCommand
With adp.SelectCommand
.Connection = New SqlConnection
.Connection.ConnectionString = My.Settings.LocalDBConnectionString
.CommandType = CommandType.StoredProcedure
.CommandText = "dbo.ProcedureName"
.Parameters.Add("@LogID", SqlDbType.Int).Direction = ParameterDirection.Output
End With

adp.Fill(ds.myTable)

Debug.WriteLine(adp.SelectCommand.Parameters.Item("@LogID").Value.ToString)
<<
ストアドの処理はこんな感じ
>>
INSERT INTO LogTable (LogState) SELECT 'Logon'
SET @LogID = SCOPE_IDENTITY()

SELECT *
FROM ServiceTimer_LogTable
WHERE LogState='Logon'
<<

回答の条件
  • 1人2回まで
  • 登録:2007/07/10 00:32:25
  • 終了:2007/07/10 22:06:44

回答(1件)

id:toriaezu No.1

toriaezu回答回数119ベストアンサー獲得回数72007/07/10 01:56:43

ポイント60pt

SelectCommandはあくまでDB上のレコードを選択するためのプロパティなので、

ストアドよりINSERTを行ってもデータの更新はされず、その後のSELECT文しか有効になっていなかったのではないでしょうか。

 

INSERTを行う場合は以下のように、別途プロパティを指定する必要があるかと思います。

adp.InsertCommand = New SqlCommand

サンプルのコードがありましたので、こちらを参考にしていただければと思います。

SqlDataAdapter プロパティ

Visual Basic .NET でストアド プロシージャを使用する

id:memo77

回答ありがとうございます。

同じソースで、会社の.net2003&SQLServer2000の組み合わせだと動いたので、SelectCommandでInsertを含むストアドが投げれないということはなさそうです。

あとは.net2005が何かやっているのか、SQLServer2005のLocalDataBaseが何かをやっているのか。

いまだ調査中です・・・

2007/07/10 21:07:55
  • id:memo77
    状況が判明したので再質問にしました。
    問題はデバッグモード時にデータベースが毎回作り直されるためでした。

    http://q.hatena.ne.jp/1184073142

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません