gpt4 book ai didi

c# - 在 C# 中访问 SQL Server 存储过程输出参数

转载 作者:行者123 更新时间:2023-11-30 13:19:59 25 4
gpt4 key购买 nike

我有一个简单的 SQL Server 存储过程:

ALTER PROCEDURE GetRowCount

(
@count int=0 OUTPUT
)

AS
Select * from Emp where age>30;
SET @count=@@ROWCOUNT;

RETURN

我正在尝试访问以下 C# 代码中的输出参数:

SqlConnection con = new SqlConnection();
con.ConnectionString = "Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True";

SqlCommand cmd = new SqlCommand();
cmd.Connection = con;

cmd.CommandText = "GetRowCount";
cmd.CommandType=CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters["@count"].Direction = ParameterDirection.Output;
con.Open();
SqlDataReader reader=cmd.ExecuteReader();
int ans = (int)cmd.Parameters["@count"].Value;
Console.WriteLine(ans);

但是在运行代码时,在代码的倒数第二行抛出 NullReferenceException。我哪里错了?提前致谢!

附言我是 SQL 过程的新手,所以我引用了 this article .

最佳答案

我建议您将 SqlConnectionSqlCommand 放入 using block 中,以保证正确处理它们。

此外,如果我没记错的话,输出参数只有在您完全读取返回的结果数据集后才可用。

既然您似乎根本不需要它 - 为什么不直接使用 .ExecuteNonQuery() 呢?这能解决问题吗?

using (SqlConnection con = new SqlConnection("Data Source=localhost\\SQLEXPRESS;Initial Catalog=answers;Integrated Security=True"))
using (SqlCommand cmd = new SqlCommand("dbo.GetRowCount", con))
{
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@count", SqlDbType.Int));
cmd.Parameters["@count"].Direction = ParameterDirection.Output;

con.Open();
cmd.ExecuteNonQuery(); // *** since you don't need the returned data - just call ExecuteNonQuery
int ans = (int)cmd.Parameters["@count"].Value;
con.Close();

Console.WriteLine(ans);
}

另外:因为您似乎只对行数真正感兴趣 - 为什么不将您的存储过程简化为这样的东西:

ALTER PROCEDURE GetRowCount
AS
SELECT COUNT(*) FROM Emp WHERE age > 30;

然后在您的 C# 代码中使用此代码段:

    con.Open();

object result = cmd.ExecuteScalar();

if(result != null)
{
int ans = Convert.ToInt32(result);
}

con.Close();

关于c# - 在 C# 中访问 SQL Server 存储过程输出参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12174399/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com