- - PR -
vb.net ストアドでレコード数(count)の取得をしたい
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-12 18:17
-------------------------------------------------------------
'パラメータ戻り値取得用に宣言 Dim SqlParam as SqlParameger With cmd2 'CommandTextの種別 = ストアド .CommandType = CommandType.StoredProcedure 'パラメータ追加: 戻り値() SqlParam = .Parameters("@TotalCount").Direction = ParameterDirection.Output 'パラメータ追加:引数 .Parameters.Add("@Sqlp_porder_begin", "porder_begin") .Parameters.Add("@Sqlp_porder_end", "porder_end") End With 'ストアド実行 cn2.Open() cmd2.ExecuteScalar() '書き出す Console.WriteLine("Number of Records: " & (SqlParam.Value)) ------------------------------------------------------------- 上記のような感じでどうでしょうか。 たぶん「record_count = cmd2.ExecuteScalar() 」が違うのではないかと。 つまり、パラメータの戻り値は、ストアドの実行結果ではないということですね。 | ||||
|
投稿日時: 2006-05-12 19:17
めだかさん、じゃんぬねっとさん、ありがとうございます。 あまり考えずに返信してしまい、申し訳ございませんでした。 下記のようにして、ストアド(引数有り)を使用して レコード数を取得することができました。 <ストアド> CREATE PROCEDURE sp_KAIKAKE_count @Sqlp_porder_begin char(10), @Sqlp_porder_end char(10) 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ソース> Dim record_count As Integer Dim cn2 As SqlConnection = New SqlConnection("Server=" & DB_SERVER & ";Initial Catalog=" & DB_CATALOG & ";User ID=" & DB_USER & ";Password=" & DB_PASSWORD & ";") Dim cmd2 As New SqlClient.SqlCommand Dim adp2 As New SqlClient.SqlDataAdapter Dim dt2 As DataTable = New DataTable 'DB接続 cn2.ConnectionString = "Server=" & DB_SERVER & ";Initial Catalog=" & DB_CATALOG & ";User ID=" & DB_USER & ";Password=" & DB_PASSWORD & ";" cn2.Open() cmd2.Connection = cn2 cmd2.CommandText = "exec sp_KAIKAKE_count @Sqlp_porder_begin='" & porder_begin & "',@Sqlp_porder_end='" & porder_end & "'" adp2.SelectCommand = cmd2 adp2.Fill(dt2) record_count = dt2.Rows(0).Item("TotalCount") cn2.Close() | ||||
|
投稿日時: 2006-05-12 19:27
むらさん、ありがとうございます。 こんな感じにして試してみましたが、うまく値が取得できませんでした。 「型 'DBNull' から型 'Integer' へのキャストが有効ではありません」 というエラーが出ました。 戻り値の方法で、できないことはないと思うんですけど…。 とりあえず、他の方法でレコード数は取得できるようにはなりましたので こちらの方法も色々試してみて、分かれば報告致します。 むらさん、めだかさん、じゃんぬねっとさん、ありがとうございました。 <VBソース> 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) 'パラメータ戻り値取得用に宣言 Dim SqlParam As SqlParameter With cmd2 'CommandTextの種別 = ストアド .CommandType = CommandType.StoredProcedure 'パラメータ追加: 戻り値() SqlParam = .Parameters.Add(New SqlParameter("@TotalCount", SqlDbType.Int, 4, "record_count")) .Parameters("@TotalCount").Direction = ParameterDirection.Output 'パラメータ追加:引数 .Parameters.Add("@Sqlp_porder_begin", "porder_begin") .Parameters.Add("@Sqlp_porder_end", "porder_end") End With 'ストアド実行 cn2.Open() cmd2.ExecuteScalar() record_count = CInt(SqlParam.Value) |