如何在 C# 中读取声明语句中定义的参数
本文关键字:语句 定义 参数 声明 读取 | 更新日期: 2023-09-27 18:31:50
在我的一个 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
如何使用 c# 读取 @SName 和@Class的值?
在该存储过程中使用变量没有意义。我认为你把这复杂化了。
只需将 select 语句更改为此语句,它们就会从存储过程返回到结果记录集中的调用代码。
Select Students.SName, Class.Class
FROM Students inner join Class on Students.ClassId = Class.ClassId
WHERE Students.GRNo = @GRNo
如果你真的必须返回一个参数(我认为你不会)。可以将变量定义为存储过程的输出参数,如此处所述。
像这样更改您的过程
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();
}