gpt4 book ai didi

c# - 将参数传递给 SQL Server 存储过程

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

我正在尝试将参数传递到我的应用程序中的存储过程,但我不知道我做错了什么。我得到一个错误

Procedure or function 'usp_getBorrowerDetails' expects parameter '@BookID', which was not supplied.

虽然我路过,但我做了很多事情,但仍然没有找到解决方案。

这是我的代码:

IDataReader reader = null;

SqlCommand command = new SqlCommand();

try
{
SqlConnection connection = GetDBConnection();

command.CommandType = CommandType.StoredProcedure;
command.CommandText = Constants.SP_BookBorrowerDetails;
command = new SqlCommand(command.CommandText, connection);

command.Parameters.AddWithValue("@BookID", bookID);

reader = base.ExecuteReader(command);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception("Oops! Something went wrong.");
}

下面是我的存储过程:

SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO

CREATE PROCEDURE [dbo].[usp_getBorrowerDetails]
@BookID INT
AS
SELECT
Name, Mobile, ReturnDate
FROM
BorrowerDetails
INNER JOIN
BookDetails ON BookDetails.CurrentBorrowerID = BorrowerDetails.ID
WHERE
BookDetails.BookID = @BookID
GO

如果我运行任何不需要任何参数的存储过程,它工作正常。只有在我添加参数时才会出现问题。

最佳答案

在设置CommandTypeCommandText 后,您将command 重新定义为全新的SqlCommand,这意味着将被视为纯 SQL,而不是存储过程。在适当的地方创建一次。

IDataReader reader = null;
SqlCommand command;

try
{
SqlConnection connection = GetDBConnection();

command = new SqlCommand(Constants.SP_BookBorrowerDetails, connection);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.AddWithValue("@BookID", bookID);

reader = base.ExecuteReader(command);
}
catch (System.Data.SqlClient.SqlException ex)
{
throw new Exception("Oops! Something went wrong.");
}

顺便说一句,您可能还应该考虑的不仅仅是保持连接打开,而是在一个方法中获取结果,而不是依赖调用代码来管理连接。

关于c# - 将参数传递给 SQL Server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49777900/

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