Dapper with SQL 服务器输出 bigint 参数 returns int32
Dapper with SQL Server output bigint parameter returns int32
我有以下 C# 代码和一个 SQL 服务器存储过程。
private static long GetTestBigintOutput(SqlConnection dbConn)
{
var sqlParams = new DynamicParameters();
sqlParams.Add("@input_param", 1);
sqlParams.Add("@output_param", SqlDbType.BigInt, direction: ParameterDirection.Output);
dbConn.Execute("stp_zzz_test_output_bigint", sqlParams, commandType: CommandType.StoredProcedure);
var output = sqlParams.Get<long>("@output_param");
return output;
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
try
{
var output = GetTestBigintOutput(GetDbConnection());
Console.WriteLine($"Output = {output}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
存储过程:
CREATE PROCEDURE stp_zzz_test_output_bigint
(@input_param bigint,
@output_param bigint OUTPUT)
AS
BEGIN
SET @output_param = @input_param
END
这个简单的控制台应用程序的输出是
Hello World!
Unable to cast object of type 'System.Int32' to type 'System.Int64'.
这是意料之中的事吗?我的其他存储过程 return 值绑定到 BIGINT
列,但实际 returned 值将适合 Int32
。但是我无法事先确定实际的 returned 值是多少,一旦程序是 运行.
,这就会改变
我知道我可以改变
var output = sqlParams.Get<long>("@output_param");
到
var output = sqlParams.Get<dynamic>("@output_param");
不过我觉得这是一种作弊行为
有什么想法吗?
问候
保罗
我不认为 DynamicParameters
的 Add
方法接受 SqlDbType
作为 dbType
参数。它应该是 DbType
而不是,因此您可以尝试更改以下内容:
sqlParams.Add("@output_param", SqlDbType.BigInt, direction: ParameterDirection.Output);
到那个:
sqlParams.Add("@output_param", dbType: DbType.Int64, direction: ParameterDirection.Output);
我有以下 C# 代码和一个 SQL 服务器存储过程。
private static long GetTestBigintOutput(SqlConnection dbConn)
{
var sqlParams = new DynamicParameters();
sqlParams.Add("@input_param", 1);
sqlParams.Add("@output_param", SqlDbType.BigInt, direction: ParameterDirection.Output);
dbConn.Execute("stp_zzz_test_output_bigint", sqlParams, commandType: CommandType.StoredProcedure);
var output = sqlParams.Get<long>("@output_param");
return output;
}
static void Main(string[] args)
{
Console.WriteLine("Hello World!");
try
{
var output = GetTestBigintOutput(GetDbConnection());
Console.WriteLine($"Output = {output}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
Console.ReadKey();
}
存储过程:
CREATE PROCEDURE stp_zzz_test_output_bigint
(@input_param bigint,
@output_param bigint OUTPUT)
AS
BEGIN
SET @output_param = @input_param
END
这个简单的控制台应用程序的输出是
Hello World!
Unable to cast object of type 'System.Int32' to type 'System.Int64'.
这是意料之中的事吗?我的其他存储过程 return 值绑定到 BIGINT
列,但实际 returned 值将适合 Int32
。但是我无法事先确定实际的 returned 值是多少,一旦程序是 运行.
我知道我可以改变
var output = sqlParams.Get<long>("@output_param");
到
var output = sqlParams.Get<dynamic>("@output_param");
不过我觉得这是一种作弊行为
有什么想法吗?
问候 保罗
我不认为 DynamicParameters
的 Add
方法接受 SqlDbType
作为 dbType
参数。它应该是 DbType
而不是,因此您可以尝试更改以下内容:
sqlParams.Add("@output_param", SqlDbType.BigInt, direction: ParameterDirection.Output);
到那个:
sqlParams.Add("@output_param", dbType: DbType.Int64, direction: ParameterDirection.Output);