我有以下C#代码和一个SQL Server存储过程。
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!
无法将类型为“System.Int32”的对象强制转换为类型“System.Int64”。
BIGINT
列相关的值,但实际返回值适合于Int32
。然而,我不能事先确定实际返回值将是什么,并且一旦程序运行,这将发生变化。我知道可以更改
var output = sqlParams.Get<long>("@output_param");
to
var output = sqlParams.Get<dynamic>("@output_param");
但我觉得这有点像作弊。
你有什么想法吗?
此致 Paul
var output = sqlParams.Get<Int64>("@output_param");
而不是var output = sqlParams.Get<long>("@output_param");
请参考此链接了解SQL和C#之间的数据类型映射。 - Hemant HalwaiBigInt
类型:sqlParams.Add("@input_param", SqlDbType.BigInt, 1);
- marc_s