2012-04-22 4 views
1

내 C# 프로젝트 중 하나에서 다음 프로 시저에서 declare 문에 정의 된 매개 변수를 읽고 싶습니다.C에서 선언문에 정의 된 매개 변수를 읽는 방법 #

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 문을 this로 변경하면 저장 프로 시저에서 결과 레코드 집합의 호출 코드로 반환됩니다.

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

매개 변수를 반드시 반환해야하는 경우 (그렇다고 생각하지 않습니다). 변수를 저장 프로 시저 as described here에서 출력 매개 변수로 정의 할 수 있습니다.

+0

내가 그렇게하는 방법을 알고 ... 주어진 절차는 예입니다. 실제 프로는 조금 길어서 간단한 프로로 바뀌 었습니다. 나는 학생을 설정해야합니다. 이름과 클래스. 확인 가능한 클래스를 읽고 그것을 읽습니다. 내 질문에 실제 코딩을 게시 하시겠습니까 ???? ???? –

+0

사실, 아마도 그렇게 할 필요는 없습니다. 매우 드문 경우입니다. 어쨌든, 나는 당신이 그런 식으로 주장하는 경우에 대비하여 나의 대답을 편집했는데, 나는 그것을 권하지 않습니다. – JohnFx

+1

출력 매개 변수에 대한 전체적인 부분 .... 사람들이 당신을 도울 것으로 예상되는 경우 최소한 여기에 약간의 노력을 기울이십시오. – JohnFx

관련 문제