gpt4 book ai didi

c# - 为什么从 C# 调用存储过程时会出错?

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:19 24 4
gpt4 key购买 nike

我是 C# 的新手,我在 SQL Server 中有一个存储过程:

DECLARE @return_value int

EXEC @return_value = [dbo].[sp_getUserInfo]
@TelNo = N'2537743007'

SELECT 'Return Value' = @return_value

GO

并尝试使用此代码调用它:

using (SqlConnection con = new SqlConnection("Data Source=SERVICE;Initial Catalog=InvokeADSL;Integrated Security=True"))
{
using (SqlCommand cmd = new SqlCommand("sp_getUserInfo", con))
{
cmd.CommandType = CommandType.StoredProcedure;

//cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text;
cmd.Parameters.Add("@TelNo", SqlDbType.NVarChar).Value = "253774300";

con.Open();

reader = cmd.ExecuteReader();

while (reader.Read())
{
Console.WriteLine(reader["return_value"].ToString());
}
}
}

但是我得到一个错误:

System.IndexOutOfRangeException: return_value
at System.Data.ProviderBase.FieldNameLookup.GetOrdinal(String fieldName) at System.Data.SqlClient.SqlDataReader.GetOrdinal(String name)
at System.Data.SqlClient.SqlDataReader.get_Item(String name)
at ConsoleApplication1.Program.Main(String[] args)

我该如何解决?谢谢。

这是我在 SQL Server 中的存储过程:link to code

最佳答案

好吧,从你展示的关于如何在 T-SQL 中调用这个存储过程的代码来看,值似乎是通过 RETURN 从存储过程返回的 语句 - 作为结果集 ( SELECT .... )。

<罢工>因此,您需要读取存储过程的返回值 - 而不是使用 ExecuteReader() 的结果集:

<罢工>
using (SqlCommand cmd = new SqlCommand("sp_getUserInfo", con))
{
cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add("@TelNo", SqlDbType.NVarChar).Value = "253774300";

con.Open();

// get the value from the RETURN statement in the stored procedure
int returnValue = cmd.ExecuteNonQuery();
Console.WriteLine("Return value: {0}", returnValue);
}

<罢工>

更新:查阅存储过程代码后,结果实际上是由SELECT 返回的(作为结果集)- 所以你确实需要使用 ExecuteReader - 但该列只是没有名称,因此您无法使用:

访问它
while (reader.Read())
{
Console.WriteLine(reader["return_value"].ToString());
}

但您需要改用数字索引:

while (reader.Read())
{
Console.WriteLine(reader[0].ToString());
}

关于c# - 为什么从 C# 调用存储过程时会出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43752338/

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