インサート処理を含むストアドを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'
<<
SelectCommandはあくまでDB上のレコードを選択するためのプロパティなので、
ストアドよりINSERTを行ってもデータの更新はされず、その後のSELECT文しか有効になっていなかったのではないでしょうか。
INSERTを行う場合は以下のように、別途プロパティを指定する必要があるかと思います。
adp.InsertCommand = New SqlCommand
サンプルのコードがありましたので、こちらを参考にしていただければと思います。
回答ありがとうございます。
同じソースで、会社の.net2003&SQLServer2000の組み合わせだと動いたので、SelectCommandでInsertを含むストアドが投げれないということはなさそうです。
あとは.net2005が何かやっているのか、SQLServer2005のLocalDataBaseが何かをやっているのか。
いまだ調査中です・・・