Sql server 使用Dapper执行的存储过程
我正在尝试使用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
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信息?