我在我的网络应用程序中创建了一个数据访问层,它使用ObjectDataSource而不是SqlDataSource。我有一个FormView来更新我的数据库中的一些数据。在我的旧asp.net代码中,我有类似的东西:
<asp:SqlDataSource ID="sdsTradeDetails" runat="server"
ConnectionString="<%$ ConnectionStrings:ForexDB %>"
SelectCommand="usp_GetTrade" SelectCommandType="StoredProcedure"
UpdateCommand="usp_UpdateTrade" UpdateCommandType="StoredProcedure"
<SelectParameters>
<asp:ControlParameter Name="tradeId" ControlID="grdTrades" PropertyName="SelectedDataKey.Value" />
</SelectParameters>
<UpdateParameters>
<asp:ControlParameter Name="tradeId" ControlId="frmTrade" PropertyName="SelectedValue" />
</UpdateParameters>
</asp:SqlDataSource>
哪个工作正常。我用这个替换了SqlDataSource:
<asp:ObjectDataSource
id="srcTrade"
TypeName="DatabaseComponent.DBUtil"
SelectMethod="GetTrade"
UpdateMethod="UpdateTrade"
runat="server">
<SelectParameters>
<asp:QueryStringParameter Name="tradeId" QueryStringField="tradeId" />
</SelectParameters>
<UpdateParameters>
<asp:ControlParameter Name="tradeId" ControlId="frmTrade" PropertyName="SelectedValue" />
</UpdateParameters>
</asp:ObjectDataSource>
但是现在当我单击FormView中的“更新”按钮时出现此错误:
异常详细信息: System.InvalidOperationException: ObjectDataSource的'srcTrade'不能 找到一个非泛型的方法 'UpdateTrade'有参数: 符号,pctAccountRisked, tradeSetupId,lotsPerUnit, initialStopPrice,tfCode,MAEPips, MFEPips,tradeGrade,executionGrade, tradeTypeId,comment,tradeId。
在我的DBUtil类中,我有这个用于UpdateTrade:
public void UpdateTrade(
int tradeId,
string symbol,
decimal pctAccountRisked,
string tradeSetupId,
decimal lotsPerUnit,
decimal initialStopPrice,
string tfCode,
int MAEPips,
int MFEPips,
int tradeGrade,
int executionGrade,
string comment)
{
SqlCommand cmd = new SqlCommand("usp_UpdateTrade");
cmd.Parameters.AddWithValue("@tradeId", tradeId);
cmd.Parameters.AddWithValue("@symbol", symbol);
cmd.Parameters.AddWithValue("@pctAccountRisked", pctAccountRisked);
cmd.Parameters.AddWithValue("@tradeSetupId", tradeSetupId);
cmd.Parameters.AddWithValue("@lotsPerUnit", lotsPerUnit);
cmd.Parameters.AddWithValue("@initialStopPrice", initialStopPrice);
cmd.Parameters.AddWithValue("@tfCode", tfCode);
cmd.Parameters.AddWithValue("@MAEPips", MAEPips);
cmd.Parameters.AddWithValue("@MFEPips", MFEPips);
cmd.Parameters.AddWithValue("@tradeGrade", tradeGrade);
cmd.Parameters.AddWithValue("@executionGrade", executionGrade);
cmd.Parameters.AddWithValue("@comment", comment);
UpdateTable(cmd, "trade");
}
这是GetTrade:
public DataTable GetTrade(int tradeId)
{
SqlCommand cmd = new SqlCommand("usp_GetTrade");
cmd.Parameters.AddWithValue("@tradeId", tradeId);
return FillDataTable(cmd, "trade");
}
请帮忙!
答案 0 :(得分:1)
您的UpdateTrade方法和数据源中的传递参数是不匹配的。请重新检查一下