gpt4 book ai didi

c# - 将 BIT 值传递给 sql server 存储过程

转载 作者:行者123 更新时间:2023-12-03 22:55:39 24 4
gpt4 key购买 nike

我有一个存储过程:

CREATE PROCEDURE myproc(@a nvarchar(50), @b nvarchar(100), @c bit)
AS ...

SELECT @retVal;

我有以下 aspx 代码:

SqlCommand cmd = new SqlCommand("myproc", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@a", a);
cmd.Parameters.AddWithValue("@b", b);
cmd.Parameters.Add("@c", SqlDbType.Bit).Value = false;

SqlParameter returnValue = new SqlParameter("@retVal", SqlDbType.NVarChar, 9999999);
returnValue.Direction = ParameterDirection.Output;
cmd.Parameters.Add(returnValue);
conn.Open();
cmd.ExecuteNonQuery();
retVal = (string)cmd.Parameters["@retVal"].Value;
conn.Close();

这给了我错误:

Procedure or function myproc has too many arguments specified.

如果我删除该行:

cmd.Parameters.Add("@c", SqlDbType.Bit).Value = false;

我收到这个错误:

Procedure or function 'myproc' expects parameter '@c', which was not supplied

我已经为这一行尝试了这些替代方案:

cmd.Parameters.AddWithValue("@c", 0);
cmd.Parameters.AddWithValue("@c", false);

我如何传递那个 BIT 参数?

最佳答案

我介绍了从过程中获取数据的 3 种方法:

这是一个返回值的sp

CREATE PROCEDURE x AS
BEGIN
return 1
END

您必须通过添加方向为 ReturnValue 且类型为 int(它只能是 int)的参数,并读取参数 .Value,在您的 c# 中获取该 1 > 在你 ExecuteNonQuery

之后

通常我们使用返回值来指示操作的状态,而不是表中的一些数据。例如,成功返回 0 的 AddUser 过程,由于用户存在而失败返回 1,由于密码太弱而失败返回 2 等,我们不会使用返回值返回新添加用户的用户 ID


这是一个有输出参数的sp

CREATE PROCEDURE x
@y INT OUTPUT
AS BEGIN
SET @y = 1
END

你必须在 c# 中通过添加名称为 @y 和方向为 Output 的参数来获取 1,并在 ExecuteNonQuery 之后读取参数值>。如果您也将参数用于输入,请将方向声明为 InputOutput


这是一个返回结果集的sp

CREATE PROCEDURE x
AS BEGIN
SELECT 1 AS y
END

您必须通过 ExecuteScalarExecuteReader 获得 1

ExecuteScalar 返回结果集左上角的单元格;这个例子很好。如果您计划返回更多的行和列,而不仅仅是一个值,请使用 ExecuteReader


听起来你把事情搞混了;决定您的 sp 将如何返回其值并相应地对 c# 进行编码。

您可以混合搭配这些,并拥有一个具有输出参数、返回值和选择结果集的存储过程,但您应该清楚 C# 的哪些位从存储过程的哪些位收集哪些数据

关于c# - 将 BIT 值传递给 sql server 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60853077/

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