-2

在我的一个项目中,我必须使用 C# 在 TextBox 中读取以下过程返回的值。

任何人都可以编写代码以在使用 c# 的以下过程返回的 TextBox 中读取 @a 吗?

create procedure [dbo].[Test]    
as    
declare    
@a numeric(5)    
begin    
set @a = (select COUNT(*) from Emp);    
return @a   
end 

我试过这个

SqlConnection cn = new SqlConnection("data source=localhost;initial catalog=acc;uid=sa;pwd=fantastic");
cn.Open();
SqlCommand cmd = cn.CreateCommand();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = "Test";
Int32 i = Convert.ToInt32(cmd.ExecuteScalar());
textBox1.Text = i.ToString();
4

2 回答 2

2

- 部分复制粘贴,大部分内容超出了头脑,但试试看:

SqlConnection con = new SqlConnection(connectionstring);
SqlCommand com = new SqlCommand("test", con);
com.CommandType = CommandType.StoredProcedure;
SqlParamter returnVal = new SqlParameter("RETURN_VALUE", SqlDbType.Int);
returnVal.Direction = ParameterDirection.ReturnValue;
com.Parameters.Add(returnVal);
com.Connection.Open();
com.ExecuteNonQuery();
int A = returnVal.value;
con.Close();

ExecuteScalar:“执行查询,并返回查询返回的结果集中第一行的第一列。” 您正在返回一个返回值,而不是一个字段。如果要使用标量,则需要编辑存储过程以实际返回如下字段:

create procedure [dbo].[Test] 
as 
begin 

select (select COUNT(*) from Emp)

end  
于 2012-04-20T10:10:00.153 回答
1

您可以使用返回参数(请参阅riffnl 的答案)或将 sp 中的“返回”更改为“选择”。

ExecuteScalar 不捕获返回值,只捕获第一个selected 值。

于 2012-04-20T10:22:12.733 回答