- - PR -
vb.net ストアドでレコード数(count)の取得をしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-12 16:34
VB.NETで開発中です。DBはSQLServer2003StandardEditionです。
ストアドを使用し、特定のselect文のレコード数をcountで取得しようとしています。 引数と戻り値有りのストアドでExecuteScalarを使用しています。 (結果が複数ではないので) エラーの原因が分からず、ストアドの@TotalCountの型を変更してみたりしたのですが、エラーが無くなりません。 色々、調べてみたのですが、これというものが見つけることができず原因が分かりませんでした。 ストアドのSQL文は、直打で正しい件数が出たので間違っていません。 もし、何か分かる方がいらっしゃいましたら、ご教授願います。 <ストアド> CREATE PROCEDURE KAIKAKE_count @Sqlp_porder_begin char(10), @Sqlp_porder_end char(10), @TotalCount int OUTPUT AS select @Totalcount = count(*) from VKAIK left join VGNKB on VKAIK.PORDER = VGNKB.PORDER and STATE = 1 left join XMLOT on VGNKB.SEIBAN = XMLOT.SEIBAN and VGNKB.EDA = XMLOT.EDA where VKAIK.PORDER >= @Sqlp_porder_begin and VKAIK.PORDER <= @Sqlp_porder_end GO <VBソース1> Dim record_count As Integer 'ストアド設定 Const StoredRecordCount As String = "KAIKAKE_count" Dim cn2 As SqlConnection = New SqlConnection("Server=" & DB_SERVER & ";Initial Catalog=" & DB_CATALOG & ";User ID=" & DB_USER & ";Password=" & DB_PASSWORD & ";") Dim cmd2 As SqlCommand = New SqlCommand(StoredRecordCount, cn2) With cmd2 'CommandTextの種別 = ストアド .CommandType = CommandType.StoredProcedure 'パラメータ追加: 戻り値() .Parameters.Add("@TotalCount", "record_count") 'パラメータ追加:引数 .Parameters.Add("@Sqlp_porder_begin", "porder_begin") .Parameters.Add("@Sqlp_porder_end", "porder_end") End With 'ストアド実行 cn2.Open() record_count = cmd2.ExecuteScalar() <実行結果1> record_count = cmd2.ExecuteScalar()で 型 nvarchar から型 int への変換エラー <VBソース2> VBソース1を下記の部分変更 'パラメータ追加: 戻り値() .Parameters.Add(New SqlParameter("@TotalCount", SqlDbType.Int, 4, "record_count")) .Parameters("@TotalCount").Direction = ParameterDirection.ReturnValue <実行結果2> record_count = cmd2.ExecuteScalar()で プロシージャ 'KAIKAKE_count' にはパラメータ '@TotalCount' を指定してください。 | ||||
|
投稿日時: 2006-05-12 17:09
こんにちは。
的外れかもしれませんが、 パラメータ@TotalCountの DirectionをParameterDirection.Outputに設定してみるとかで いけないでしょうか。 | ||||
|
投稿日時: 2006-05-12 17:49
むらさん、ありがとうございます。 <VBソース2>の方ですね。 'パラメータ追加: 戻り値() .Parameters.Add(New SqlParameter("@TotalCount", SqlDbType.Int, 4, "record_count")) .Parameters("@TotalCount").Direction = ParameterDirection.Output にしたら エラー「プロシージャ 'KAIKAKE_count' にはパラメータ '@TotalCount' を指定してください。」 は、出なくなりました。ありがとうございます。 しかし、値は取れていませんでした。 cmd2.ExecuteScalar()をクイックウォッチでみたらNothingとなっています。 ここに数字が返るようにならないといけないのかな? 引き続き、何か分かる方がいらっしゃいましたらよろしくお願い致します。 | ||||
|
投稿日時: 2006-05-12 17:50
OUTPUTパラメータを使用せずとも
普通にストアドで select cnt=count(*) from table みたいな感じにすると VBからは sqlcommand.commandtext="exec stored1 " としてデータセットにアダプターからFillしてやれば取得できますよ | ||||
|
投稿日時: 2006-05-12 17:56
めだかさん、ありがとうございます。 ストアドにしている理由は、レコード数が多くてタイムアウトが 発生することがあったからなんです。 普通のselect文のcommandはいつも使用しているのでやり方は分かります。 ストアドで方法がわかれば、ぜひ知りたいのです。 よろしくお願い致します。 | ||||
|
投稿日時: 2006-05-12 17:59
だから、同じですよね。 CommandType.StoredProcedure くらいでしょう。 _________________ C# と VB.NET の入門サイト じゃんぬねっと日誌 | ||||
|
投稿日時: 2006-05-12 17:59
めだかさん、すみません。
早合点してしまいました。 ちょっと、試してみます。 | ||||
|
投稿日時: 2006-05-12 18:01
じゃんぬねっとさんも、すみません。
ありがとうございます。 今から試してみます。 |