Appel de la procédure SQL stockée à l'aide de Dapper

c# dapper sql

Question

J'ai suivi la procédure stockée 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   

J'essaie de lire la valeur de NENUMBER en utilisant dapper, voici mon code

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;
}

Mais je reçois toujours l'erreur suivante

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.

Toute aide est grandement appréciée.

Réponse acceptée

plusieurs erreurs d'utilisation:

  1. transmettre DbType.Int32 / DbType.String comme valeur plutôt que comme type de données
  2. si vous ne transmettez pas une valeur de chaîne, il faut un indice pour la longueur
  3. Vous devez utiliser Execute , pas QueryMultiple ici
  4. utiliser le retour de Execute pour signifier la valeur de retour de la procédure stockée (ce n'est simplement pas ainsi que fonctionne ADO.NET; la valeur de retour contient théoriquement les lignes affectées, mais il s'agit généralement d'un nombre sans signification)

Alors:

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");


Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi