2010-11-09 39 views
0

我在我的web應用程序中使用ObjectDataSource而不是SqlDataSource創建了一個數據訪問層。我有一個FormView來更新我的數據庫中的一些數據。在我的舊asp.net代碼中,我有類似的東西:從SqlDataSource轉換爲ObjectDataSource,導致悲傷

<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

嗨你的UpdateTrade方法和來自你的數據源的傳遞參數是不匹配的。請重新檢查它們

+0

感謝您的回答。我剛剛檢查了參數。我不確定你的意思,但是我所做的是檢查GetTrade返回的列是否存在於UpdateTrade中。 GetTrade返回的一些額外的列在UpdateTrade中不存在,但這正是我想要的。我還能檢查什麼?我是否需要列出UpdateTrade中的每個更新參數?當使用SqlDataSource時,我不需要這樣做,我只是將主鍵(tradeId)添加爲UpdateTrade的唯一參數。 – 2010-11-09 09:49:09

+1

是的,您需要將UpdateTrade方法的所有參數設置爲UpdateParameters(或者必須在更新觸發前將其添加到代碼隱藏中)。 – patmortech 2010-11-09 11:22:12

+0

@patmortech - 非常感謝。現在都在工作。 – 2010-11-09 14:43:49

相關問題