Dapperを使用したSQLストアドプロシージャの呼び出し

c# dapper sql

質問

私は次の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. ここではQueryMultipleではなくExecuteを使うべきです
  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");


ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ
ライセンスを受けた: CC-BY-SA with attribution
所属していない Stack Overflow
このKBは合法ですか? はい、理由を学ぶ