我的SQL Server存储过程从SELECT
语句返回结果集,并且output parameters
。当我从C#(通过SqlConnection
类建立的连接)中调用它时,我遇到了一个问题:out参数返回null。如果我在程序中注释select语句而不是得到正确的结果。
CREATE PROC test
@Out INT OUT
AS
BEGIN
SET @Out=4
SELECT * FROM temp_table
END
out参数是否等待选择语句?
如何解决?
已添加-----> @huMptyduMpty是对的我只提到了sql程序进行实验。现在我从C#侧显示更改的过程和代码。 我写这个程序。
CREATE PROC T_Proc
@Count INT = NULL OUT
AS
BEGIN
SET @Count = (SELECT COUNT(*) FROM T_Table AS tt)
--SELECT * FROM T_Table AS tt
END
和C#中的这个
SqlConnection conn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=test;Integrated Security=True");
SqlCommand cmd = new SqlCommand("T_Proc", conn);
cmd.CommandType = CommandType.StoredProcedure;
SqlDataAdapter MyDataAdapter = new SqlDataAdapter();
MyDataAdapter.SelectCommand = cmd;
SqlParameter a1 = cmd.Parameters.Add("@Count", SqlDbType.Int);
a1.Direction = ParameterDirection.Output;
DataSet Mydataset = new DataSet();
conn.Open();
cmd.ExecuteReader();
textBox1.Text = a1.Value.ToString();
conn.Close();
在这种情况下,T_Proc正确返回结果,但如果我从SQL过程取消选中此剪辑 - SELECT * FROM T_Table AS tt 而不是@Count返回 null
答案 0 :(得分:0)
“您可以调用的SQL Server存储过程是一个返回一个或多个OUT参数的存储过程,这些参数是存储过程用于将数据返回给调用应用程序的参数。”
详细了解Using a Stored Procedure with Output Parameters
所以你可以做点什么
CREATE PROC test
@Out INT OUT
AS
BEGIN
SELECT @Out = FieldName FROM temp_table
END
我建议你(我更喜欢),如果要选择多列,不要使用输出参数。您可以使用c#
代码
另请查看Stored Procedure, when to use Output parameter vs Return variable
<强>更新强>
要获取行计数,只需删除输出参数并从c#code
获取计数即。
var reader = cmd.ExecuteReader();
var rowCount = reader.Cast<object>().Count();
不太确定你之后的事情
检查一下
CREATE PROC T_Proc
AS
BEGIN
Declare @Count INT
SET @Count = (SELECT COUNT(*) FROM T_Table AS tt)
SELECT *, @Count as TotalCount
FROM T_Table AS tt
Where xxxx---condition if you need any
END
答案 1 :(得分:0)
您可以获取数据集和参数值,您只需要切换顺序:首先数据集,然后参数。
来自MSDN:
在关闭SqlDataReader之前,无法访问通过调用ExecuteReader返回的Output,InputOut和ReturnValue参数。