【发布时间】:2014-07-07 18:04:55
【问题描述】:
我正在尝试使用 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
【问题讨论】:
-
你能展示一下
PracticeRebateOrders的样子吗?或者至少fTaxInvoiceNumber看起来像什么?另外-关于“对象引用未设置为对象的实例”-究竟是什么时候发生的?这是否可能仅仅是因为没有行,因此result是null?作为旁注,您的try/catch没有用,您应该在这里使用using,而不是try- 即using(var db = new SqlConnection(...)) {...}。请注意,如果您使用using,则不需要Close()/Dispose(),因此您只需return db.Query<...>(...).FirstOrDefault(); -
fTaxInvoiceNumber 看起来像这样 - INV0120000028PPN。错误发生在我执行存储过程的地方。 var result = db.Query
("GetPracticeRebateOrderByInvoiceNumber", new { TaxInvoiceNumber = InvoiceNumber }, commandType: CommandType.StoredProcedure).FirstOrDefault(); .好的,我会注意的,谢谢 -
不,你误会我了;我在问你的
PracticeRebateOrders类上的属性fTaxInvoiceNumber是什么样的。不是价值是什么;但是什么是成员声明. -
对不起,它看起来像这样: public string fTaxInvoiceNumber ; [System.Xml.Serialization.XmlElementAttribute(Form = System.Xml.Schema.XmlSchemaForm.Unqualified)] public string TaxInvoiceNumber { get { return fTaxInvoiceNumber; } 设置 { fTaxInvoiceNumber = 值; } }
-
嗯;这很奇怪——应该可以正常工作;我可以在这里使用任何 .StackTrace 信息吗?
标签: sql-server dapper