Procédure stockée exécutée à l'aide de Dapper

dapper sql-server

Question

J'essaie d'exécuter une procédure stockée en utilisant Dapper mais j'obtiens deux types d'erreurs:

  1. Erreur d'analyse de la colonne 9 (fTaxInvoiceNumber = INV0000000028PPN - String)
  2. La référence d'objet n'est pas définie à une instance d'un objet

Voici le code pour exécuter la procédure stockée:

SqlConnection db = new SqlConnection(ConnectionFactory.ConnectionString("RebateSystem"));
db.Open();

try
{
    var result = db.Query<PracticeRebateOrders>("GetPracticeRebateOrderByInvoiceNumber", new
    {
       TaxInvoiceNumber = InvoiceNumber
    }, commandType: CommandType.StoredProcedure).FirstOrDefault();
    db.Close();
    db.Dispose();

    return result;
}
catch (Exception ex)
{
   throw;
}

Ceci est ma procédure stockée:

ALTER PROCEDURE [dbo].[GetPracticeRebateOrderByInvoiceNumber] 
    @TaxInvoiceNumber NVARCHAR(20)
AS
BEGIN
   SELECT TOP(1) 
      [fPracticeRebateOrdersID]
      ,[fPracticeID]
      ,[fPracticeUserID]
      ,[fCreatedDate]
      ,[fInvoiceInCredits]
      ,[fPurchaseDate]
      ,[fPracticeRebateOrderStatusID]
      ,[fRebatePaymentRunID]
      ,[fRebateBatchID]
      ,[fTaxInvoiceNumber]
   FROM 
      [PracticeRebateSystem].[dbo].[PracticeRebateOrders]
   WHERE 
      fTaxInvoiceNumber = @TaxInvoiceNumber
END

Réponse d'expert

Pas vraiment une réponse, mais basé sur le code disponible dans la question et dans les commentaires, j'ai ceci ... qui fonctionne bien et avec succès ...

public void SO24605346_ProcsAndStrings()
{
    connection.Execute(@"create proc #GetPracticeRebateOrderByInvoiceNumber @TaxInvoiceNumber nvarchar(20) as
        select @TaxInvoiceNumber as [fTaxInvoiceNumber]");
    string InvoiceNumber = "INV0000000028PPN";
    var result = connection.Query<PracticeRebateOrders>("#GetPracticeRebateOrderByInvoiceNumber", new
    {
        TaxInvoiceNumber = InvoiceNumber
    }, commandType: CommandType.StoredProcedure).FirstOrDefault();

    result.TaxInvoiceNumber.IsEqualTo("INV0000000028PPN");
}
class PracticeRebateOrders
{
    public string fTaxInvoiceNumber;
    [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)]
    public string TaxInvoiceNumber { get { return fTaxInvoiceNumber; } set { fTaxInvoiceNumber = value; } }
}

Je suis heureux de vous aider, mais je ne peux pas reproduire un problème. Ça va bien ici.




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