人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

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'
<<

●質問者: memo77
●カテゴリ:コンピュータ
✍キーワード:ADD as D.P ds SELECT
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

1 ● toriaezu
●60ポイント

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

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

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

adp.InsertCommand = New SqlCommand

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

SqlDataAdapter プロパティ

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

◎質問者からの返答

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

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

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

いまだ調査中です・・・

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ