2012-01-17 16 views
0

私はSQL Serverで次のストアドプロシージャを持っており、私はC#で許可値を取得しようとしています。ストアドプロシージャから値を取得

CREATE PROCEDURE [dbo].[GetPermission] 
@userName varchar(50), 
@permission int output 
AS 
BEGIN 

select @permission = PERMISSION from USERS where UserName = @userName 

END; 

私のC#コードは以下の通りです:

 SqlCommand cmd = new SqlCommand(
      "sp_getPermission", conn); 


     cmd.CommandType = CommandType.StoredProcedure; 


     cmd.Parameters.Add(
      new SqlParameter("@UserName", textBox1.Text)); 
     cmd.Parameters.Add(
      new SqlParameter("@permission", "none")); 




     SqlDataReader rdr = null; 

     rdr = cmd.ExecuteReader(); 
     MessageBox.Show(rdr["Permission"].ToString()); 

しかし、私はC#コードの最後の行に次のエラーを取得する:

データが存在しない時に読むため

無効な試み。

答えて

2

単にこのレッツ:

CREATE PROCEDURE [dbo].[GetPermission] 
@userName varchar(50) 
AS 
BEGIN 

select PERMISSION from USERS where UserName = @userName 

END; 

と許可、使用を読んでために:このようなあなたの手順を変更、そして、出力パラメータ@permissionを削除し、

最初ExecuteScalarメソッド:

SqlCommand cmd = new SqlCommand(
    "sp_getPermission", conn); 


cmd.CommandType = CommandType.StoredProcedure; 


cmd.Parameters.Add(
    new SqlParameter("@UserName", textBox1.Text)); 

var permission = (System.Int32)cmd.ExecuteScalar(); 
0

あなたは、のExecuteReaderを使用する必要が結果セットを結果のないされていないとして、またParameterDirection.Output

にSqlCommandオブジェクト上の許可パラメータのParameterDirectionを設定する必要があります。ただ、やる:

cmd.ExecuteNonQuery(); 
0

あなたのSqlDataReaderReadする必要があります。

rdr = cmd.ExecuteReader(); 
if (rdr.HasRows()){ 
    rdr.Read() 
    MessageBox.Show(rdr["Permission"].ToString()); 
    rdr.Close() 
} 

しかし、私はあなたがこのような状況のためにSqlDataReaderのを必要と信じていません。以下の作業をする必要があります:

cmd.Parameters.Add(
      new SqlParameter("@permission", "none")); 
cmd.Parameters["@permission"].Direction = ParameterDirection.Output; 

cmd.ExecuteNonQuery(); 

MessageBox.Show(cmd.Parameters["@permission"].Value); 
+0

cmd.Parameters(@per)でエラーが発生するミッション).....エラー "エラー非呼び出し可能なメンバ 'System.Data.SqlClient.SqlCommand.Parameters'はメソッドのように使用できません" – pikk

関連する問題