从SqlDataSource转换为ObjectDataSource,导致悲痛

时间:2010-11-09 09:26:58

标签: c# asp.net c#-4.0 objectdatasource

我在我的网络应用程序中创建了一个数据访问层,它使用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");
}

请帮忙!

1 个答案:

答案 0 :(得分:1)

您的UpdateTrade方法和数据源中的传递参数是不匹配的。请重新检查一下