1

私の c# プロジェクトの 1 つで、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

c# を使用して @SName と @Class の値を読み取るにはどうすればよいですか?

4

2 に答える 2

2

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

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

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

本当にパラメーターを返さなければならない場合 (そして、私はそうは思わない)。こちら で説明されているように、変数をストアド プロシージャからの出力パラメータとして定義できます。

于 2012-04-22T06:34:47.337 に答える
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

利用方法:

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();
        }
于 2012-04-22T08:03:15.393 に答える