Sql server 使用Dapper执行的存储过程

Sql server 使用Dapper执行的存储过程,sql-server,dapper,Sql Server,Dapper,我正在尝试使用Dapper执行存储过程,但出现两种类型的错误: 分析第9列时出错(fTaxInvoiceNumber=INV0000000028PPN-字符串) 对象引用未设置为对象的实例 以下是执行存储过程的代码: SqlConnection db = new SqlConnection(ConnectionFactory.ConnectionString("RebateSystem")); db.Open(); try { var result = db.Query<Prac

我正在尝试使用Dapper执行存储过程,但出现两种类型的错误:

  • 分析第9列时出错(fTaxInvoiceNumber=INV0000000028PPN-字符串)
  • 对象引用未设置为对象的实例
  • 以下是执行存储过程的代码:

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

    不是一个真正的答案,但根据问题中可用的代码和我的评论,我有这个。。。它运行良好且成功

    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; } }
    }
    
    public void SO24605346_ProcsAndStrings()
    {
    连接。执行(@“创建过程”#GetPracticeBateOrderByInvoiceNumber@TaxInvoiceNumber nvarchar(20)作为
    选择@TaxInvoiceNumber作为[fTaxInvoiceNumber]”;
    字符串InvoiceNumber=“INV0000000028PPN”;
    var result=connection.Query(#GetPracticeBateOrderByInvoiceNumber),新建
    {
    TaxInvoiceNumber=发票编号
    },commandType:commandType.StoredProcess).FirstOrDefault();
    结果:TaxInvoiceNumber.IsEqualTo(“INV0000000028PPN”);
    }
    课堂实习-订单
    {
    公共字符串编号;
    [System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
    公共字符串TaxInvoiceNumber{get{return fTaxInvoiceNumber;}set{fTaxInvoiceNumber=value;}}
    }
    

    我很乐意帮忙,但我无法重现问题。这里看起来不错。

    你能展示一下
    PracticeBateOrders
    的样子吗?或者至少语音号码是什么样子?另外,在“对象引用未设置为对象实例”中,具体是什么时候发生的?这是否可能仅仅是因为没有行,因此
    结果
    ?作为旁注,您的
    try
    /
    catch
    没有用,您应该在这里使用
    using
    ,而不是
    try
    ——即
    使用(var db=new SqlConnection(…){…}
    )。请注意,如果使用
    using
    ,则不需要
    Close()
    /
    Dispose()
    ,因此只需
    返回db.Query(…).FirstOrDefault()fTaxInvoiceNumber看起来像这样-INV0120000028PPN。错误发生在我执行存储过程的地方。var result=db.Query(“GetPracticeBateOrderByInvoiceNumber”,新的{TaxInvoiceNumber=InvoiceNumber},commandType:commandType.StoredProcedure).FirstOrDefault()。好的,我会记下的,谢谢,你误解了我;我在问你的
    PracticeBateOrders
    课程上的属性
    FTAXINVOICENAMERE
    是什么样子的。不是价值是什么;但是什么是会员声明呢?对不起,这里是它的样子:公共字符串;[System.Xml.Serialization.xmlementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]公共字符串TaxInvoiceNumber{get{return fTaxInvoiceNumber;}set{fTaxInvoiceNumber=value;}}}hmmm;这很奇怪——这应该行得通;有没有我可以在这里使用的StackTrace信息?