J'ai créé une couche d'accès aux données dans mon application Web qui utilise ObjectDataSource au lieu de SqlDataSource. J'ai un formulaire pour mettre à jour certaines données dans ma base de données. Dans mon ancien code asp.net j'avais quelque chose comme:Conversion de SqlDataSource en ObjectDataSource, causant du chagrin
<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>
Qui a bien fonctionné. Je l'ai remplacé SqlDataSource avec ceci:
<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>
Mais maintenant j'obtenir cette erreur lorsque je clique sur le bouton de mise à jour dans mon FormView:
Exception Détails: System.InvalidOperationException: ObjectDataSource 'srcTrade' ne pouvait pas trouver une méthode non générique 'UpdateTrade' qui a des paramètres: symbole, pctAccountRisked, tradeSetupId, lotsPerUnit, initialStopPrice, tfCode, MAEPips, MFEPips, tradeGrade, executionGrade, tradeTypeId, commentaire, tradeId.
Dans ma classe DBUtil je cela pour 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");
}
et ceci pour GetTrade:
public DataTable GetTrade(int tradeId)
{
SqlCommand cmd = new SqlCommand("usp_GetTrade");
cmd.Parameters.AddWithValue("@tradeId", tradeId);
return FillDataTable(cmd, "trade");
}
S'il vous plaît aider!
Merci pour la réponse. Je viens de vérifier les paramètres. Je ne suis pas vraiment sûr de ce que vous voulez dire, mais ce que j'ai fait était de vérifier que les colonnes retournées par GetTrade existent dans UpdateTrade. Il y a quelques colonnes supplémentaires retournées par GetTrade qui n'existent pas dans UpdateTrade, mais c'est ce que je veux. Quoi d'autre pourrais-je vérifier? Ai-je besoin de répertorier tous les paramètres Update dans UpdateTrade? Lors de l'utilisation d'une SqlDataSource, je n'avais pas besoin de faire cela, j'ai simplement ajouté la clé primaire (tradeId) comme seul paramètre à UpdateTrade. –
Oui, vous devez avoir tous les paramètres de la méthode UpdateTrade en tant que UpdateParameters (ou les ajouter dans le code-behind avant que la mise à jour se déclenche). – patmortech
@patmortech - merci c'était fini. Tout fonctionne maintenant. –