gpt4 book ai didi

c# - 使用 Dapper 调用 SQL 存储过程

转载 作者:行者123 更新时间:2023-11-30 17:49:21 31 4
gpt4 key购买 nike

我有以下 SQL 存储过程

GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[GetNextNumberTest]
@NEWNUMBER varchar(100) OUTPUT
AS
BEGIN
SET NOCOUNT ON;
SET @NEWNUMBER = 'ABC00001'
RETURN 1
END

我正在尝试使用 dapper 读取 NENUMBER 值,这是我的代码

private string GetNextNumber()
{
var dynamicParams = new DynamicParameters();
dynamicParams.Add("rval", DbType.Int32, direction: ParameterDirection.ReturnValue);
dynamicParams.Add("NEWNUMBER", DbType.String, direction: ParameterDirection.Output);
var data = db.QueryMultiple("GetNextNumberTest", dynamicParams, commandType: CommandType.StoredProcedure);
var result = dynamicParams.Get<string>("NEWNUMBER");
return result;
}

但我总是得到以下错误

An exception of type 'System.Data.SqlClient.SqlException' occurred in Dapper.dll but was    not handled in user code

Additional information: Error converting data type varchar to int.

非常感谢任何帮助。

最佳答案

多个使用错误:

  1. 传递 DbType.Int32/DbType.String 作为而不是数据类型
  2. 如果您不传递字符串值,则需要提示长度
  3. 你应该在这里使用Execute,而不是QueryMultiple
  4. 使用 Execute 的返回值来表示存储过程的返回值(这根本不是 ADO.NET 的工作方式;理论上,返回值会影响行,但通常一个无意义的数字)

所以:

dynamicParams.Add("rval", dbType: DbType.Int32,
direction: ParameterDirection.ReturnValue);
dynamicParams.Add("NEWNUMBER", dbType: DbType.String,
direction: ParameterDirection.Output, size: 100);
db.Execute("GetNextNumberTest", dynamicParams,
commandType: CommandType.StoredProcedure);
var rval = dynamicParams.Get<int>("rval");
var result = dynamicParams.Get<string>("NEWNUMBER");

关于c# - 使用 Dapper 调用 SQL 存储过程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21864823/

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