簡體   English   中英

Dapper 使用 SQL 服務器 output bigint 參數返回 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

這個簡單的控制台應用程序的 output 是

你好世界!
無法將“System.Int32”類型的 object 轉換為“System.Int64”類型。

這是可以預料的嗎? 我的其他存儲過程返回與BIGINT列相關的值,但實際返回的值將適合Int32 但是我不能事先確定實際返回的值是多少,一旦程序運行,這將改變。

我知道我可以改變

var output = sqlParams.Get<long>("@output_param");

var output = sqlParams.Get<dynamic>("@output_param");

但是我覺得這是一種作弊。

有什么想法嗎?

問候保羅

我不認為DynamicParametersAdd方法接受SqlDbType作為dbType參數。 它應該是DbType ,因此您可以嘗試更改以下內容:

sqlParams.Add("@output_param", SqlDbType.BigInt, direction: ParameterDirection.Output);

對此:

sqlParams.Add("@output_param", dbType: DbType.Int64, direction: ParameterDirection.Output);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM