2012-04-22 22 views
1

私のC#プロジェクトの1つでは、以下の手順からdeclareステートメントで定義されたパラメータを読みたいと思います。Cでのdeclareステートメントで定義されたパラメータを読む方法

create procedure [dbo].[TestRecordSelectMInfo2] 
@GRNo varchar(4) 
as 
declare 
@SName varchar(35), 
@Class Varchar(15) 
begin 
Select @SName = Students.SName, @Class = Class.Class from Students inner join Class on Students.ClassId = Class.ClassId where Students.GRNo = @GRNo 
end 

@SNameと@Classの値をC#でどのように読み取ることができますか?

答えて

1

この

create procedure [dbo].[TestRecordSelectMInfo3] 
@GRNo varchar(4), 
@SName varchar(35) output, 
@Class Varchar(15) output 
as 
begin 
Select @SName = Students.SName, @Class = Class.Class from Students inner join Class on Students.ClassId = Class.ClassId where Students.GRNo = @GRNo 
end 

USAGEのようなあなたの手順を変更:

private void GetData() 
     { 
      cmd.Parameters.Clear(); 
      cmd.Parameters.Add("@GRNo", SqlDbType.VarChar).Value = tbgrno.Text; 
      SqlParameter SName = new SqlParameter("@SName", SqlDbType.VarChar); 
      SqlParameter Class = new SqlParameter("@Class", SqlDbType.VarChar); 
      SName.Direction = ParameterDirection.Output; 
      Class.Direction = ParameterDirection.Output; 
      SName.Size = 35; 
      Class.Size = 15; 
      cmd.Parameters.Add(SName); 
      cmd.Parameters.Add(Class); 
      dm.ExectNonActQuery("TestRecordSelectMInfo", cmd); 
      tbsname.Text = cmd.Parameters["@SName"].Value.ToString(); 
      tbclass.Text = cmd.Parameters["@Class"].Value.ToString(); 
     } 
     public void ExectNonActQuery(string spname, SqlCommand command) 
     { 
      SqlConnection cn = new SqlConnection("connection string"); 
      cmd = command; 
      cmd.Connection = cn; 
      cmd.CommandText = spname; 
      cmd.CommandType = CommandType.StoredProcedure; 
      cmd.ExecuteNonQuery(); 
     } 
2

このストアドプロシージャでの変数の使用は意味をなさない。私はあなたがこれを過度に複雑にしていると思います。

selectステートメントをこれに変更すると、ストアドプロシージャから結果のレコードセット内の呼び出しコードに返されます。

Select Students.SName, Class.Class 
FROM Students inner join Class on Students.ClassId = Class.ClassId 
WHERE Students.GRNo = @GRNo 

本当にパラメータを返す必要がある場合は(私はそう思わない)ストアドプロシージャas described hereから出力パラメータとして変数を定義することができます。

+0

私はそれを行う方法を知っている...与えられた手順は一例です。実際のプロはちょっと時間がかかるので、簡単なものに変更しました。私はStudents.SNameとClass.Classを設定しなければなりません。私の質問に実際のコーディングを投稿したいのですか? –

+0

実際、そうする必要はないでしょう。非常に珍しいことです。いずれにしても、あなたがそのようにすることを強く主張する場合に備えて、私は自分の答えを編集しました。私はアドバイスしません。 – JohnFx

+1

出力パラメータについての全体的な部分....あなたが人々を助けることを期待している場合は、少なくともこれにいくつかの努力をしてください。 – JohnFx

関連する問題