2011-08-17 7 views
0

私は、ASP.NETページでストアドプロシージャを呼び出してその戻り値を取得しようとしています。ここに私のコードは次のとおりです。ASP.netはSQL Serverストアプロシージャの問題を呼び出します。

//Something 
MyConnection.Open(); 
SqlDataReader reader = MyCommand.ExecuteReader(); 

if (reader.Read()) 
{ 
    if (returnParameter != null) 
     result = Convert.ToInt32(reader[returnParameter.ParameterName]); 
} 
//Something else 

すべてがreader.Read()は常にfalseを返していることを除いて、正常に動作しているので、私は、戻り値を取得することはできません。そしてストアドプロシージャが実行されます。これはサーバー側から確認されます。例外はありません。

何が問題ですか?

+0

それのストアを参照してください。** D **手順になります(ストアとは関係ありません) –

+0

ストアドプロシージャの定義を表示できますか?どんなパラメータを渡しますか?どんなパラメータが返されますか? –

答えて

2

戻り値(RETURN文を使用)または出力パラメータを使用していますか?もしそうなら、ExecuteReaderは間違った選択です。 ExecuteReaderは、SPがSELECTステートメントを使用してデータを出力する場合にのみ、データを返します。戻り値はExecuteNonQueryです。手順** SQL Serverで** STORED - (MSDNから引用)例えば、

CREATE PROCEDURE dbo.InsertCategory 
    @CategoryName nvarchar(15), 
    @Identity int OUT 
AS 
INSERT INTO Categories (CategoryName) VALUES(@CategoryName) 
SET @Identity = SCOPE_IDENTITY() 
RETURN @@ROWCOUNT 

とコードは

// Assumes connection is a valid SqlConnection. 
SqlCommand command = new SqlCommand("InsertCategory" , connection); 
command.CommandType = CommandType.StoredProcedure; 

SqlParameter parameter = command.Parameters.Add(
    "@RowCount", SqlDbType.Int); 
parameter.Direction = ParameterDirection.ReturnValue; 

parameter = command.Parameters.Add(
    "@CategoryName", SqlDbType.NChar, 15); 

parameter = command.Parameters.Add("@Identity", SqlDbType.Int); 
parameter.Direction = ParameterDirection.Output; 

command.Parameters["@CategoryName"].Value = "New Category"; 
command.ExecuteNonQuery(); 

Int32 categoryID = (Int32) command.Parameters["@Identity"].Value; 
Int32 rowCount = (Int32) command.Parameters["@RowCount"].Value; 

http://msdn.microsoft.com/en-us/library/3btz0xwf.aspx

+0

ありがとうございます。私はそれを理解し、解決策はまったく同じです。 – AKFish

0

戻り値を取得するには、最初のレコードだけでなく、結果セットの最後のレコードを読み取る必要があります。

+0

ご返信ありがとうございます。しかし、私の問題はreader.Read()が初めてであっても常にfalseです。 – AKFish

関連する問題