ObjectDataSource' ObjectDataSource1'找不到非泛型方法Update

时间:2014-04-14 07:27:59

标签: c# asp.net gridview objectdatasource

到目前为止,我尝试了解决这个类似问题的每个解决方案,每次都会出现此错误。 Plz帮助!!

静态方法

[DataObjectMethod(DataObjectMethodType.Update)]
public static void updateCustomer(int CustomerID, string firstname, string lastname, string email, int AccountNum)
{

    SqlConnection connection = new SqlConnection(getConnectionString());

    connection.Open();

    SqlCommand command = new SqlCommand("sp_updateCustomer", connection);
    command.CommandType = CommandType.StoredProcedure;
    command.Parameters.AddWithValue("@Cust_Id", CustomerID);
    command.Parameters.AddWithValue("@Cust_Fname", firstname);
    command.Parameters.AddWithValue("@Cust_Lname", lastname);
    command.Parameters.AddWithValue("@Cust_Email", email);
    command.Parameters.AddWithValue("@Bank_Account_num", AccountNum);




    command.ExecuteNonQuery();

    connection.Close();
}

GridView的

                                                                                                                    

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}" SelectMethod="viewAllCustomer" TypeName="BusinessLogic" UpdateMethod="updateCustomer" >
    <UpdateParameters>
        <asp:Parameter Name="CustomerID" Type="Int32" />
        <asp:Parameter Name="firstname" Type="String" />
        <asp:Parameter Name="lastname" Type="String" />
        <asp:Parameter Name="email" Type="String" />
        <asp:Parameter Name="AccountNum" Type="Int32" />
    </UpdateParameters>

2 个答案:

答案 0 :(得分:1)

使用VS-2012 Express for WEB,我也遇到了困难,发现参数名称必须匹配四个位置 - 类型数据集设计器(xsd),BLL级更新函数,aspx -designer to&#39;配置数据源&#39;和aspx源文件。

首先,通过选择&#34;将异常详细信息复制到剪贴板&#34;弹出错误时保存错误消息的副本。所以你可以在NOTEPAD中引用它。请将这些参数视为错误: 请注意,当被两个*。

包围时, EMAIL 参数应为BOLD
  Message=ObjectDataSource 'ODS_LOGIN_DETAILS' could not find a non-generic method 
'UpdateFromDetailsView' that has parameters: 
    original_UID_LOGIN, original_UID_CONTACT, UID_USER_TYPE, TXT_USERNAME,
    TXT_PASSWORD, BOOL_IS_ACTIVE, DT_END, cFirstName, cLastName, 
    cCONTACTTITLE, original_cTXT_PHONE, **cCONTACT_EMAIL**.

然后,将错误消息中的参数列表与代码中的这些位置进行比较:

  1. 数据源参数的aspx页面(例如......)

    <UpdateParameters>
    <asp:Parameter Name="original_UID_LOGIN" Type="Int32" />
    <asp:Parameter Name="original_UID_CONTACT" Type="Int32" />
    <asp:Parameter Name="UID_USER_TYPE" Type="Int32" />
    <asp:Parameter Name="TXT_USERNAME" Type="String" />
    <asp:Parameter Name="TXT_PASSWORD" Type="String" />
    <asp:Parameter Name="BOOL_IS_ACTIVE" Type="Boolean" />
    <asp:Parameter Name="DT_END" Type="DateTime" />
    <asp:Parameter Name="cFirstName" Type="String" />
    <asp:Parameter Name="cLastName" Type="String" />
    <asp:Parameter Name="cCONTACTTITLE" Type="String" />
    <asp:Parameter Name="original_cTXT_PHONE" Type="String" />
    <asp:Parameter Name="**cCONTACT_EMAIL**" Type="String" />
    

  2. 现在比较ObjectDataSource UPDATE方法的参数列表:

    Public Function UpdateFromDetailsView(
       ByVal original_UID_LOGIN As Int32,
       ByVal original_UID_CONTACT As Int32,
       ByVal UID_USER_TYPE As Int32,
       ByVal TXT_USERNAME As String,
       ByVal TXT_PASSWORD As String,
       ByVal BOOL_IS_ACTIVE As Boolean,
       ByVal DT_END As Date,
       ByVal cFirstName As String,
       ByVal cLastName As String,
       ByVal cCONTACTTITLE As String,
       ByVal original_cTXT_PHONE As String,
       ByVal **CONTACT_EMAIL** As String
     ) As Boolean
    

    最后,将参数与强类型数据集函数进行比较:

    iRet = Adapter.UpdateFromDetailsView(
       original_UID_LOGIN,
       original_UID_CONTACT,
       UID_USER_TYPE,
       TXT_USERNAME,
       TXT_PASSWORD,
       BOOL_IS_ACTIVE,
       DT_END,
       cFirstName,
       cLastName,
       cCONTACTTITLE,
       original_cTXT_PHONE,
       **CONTACT_EMAIL**)
    

    您应该注意到EMAIL参数存在许多差异,并且所有这些引用都需要具有相同的参数名称。

    当你&#34; Rebuild Solution&#34;时,类型数据集将被更新,BLL-class将被更新,但不会更新aspx中的ObjectDataSource。你需要&#34;配置数据源&#34;重建解决方案后,在aspx-designer页面上。

    在这个例子中,BLL-class需要包含一个&#39; cCONTACT_EMAIL&#39;作为参数并传递给适配器函数。

    我希望这有帮助......谢谢......约翰

答案 1 :(得分:0)

从ObjectDataSource,我会说是的,你使用的是TypeName错误。在MSDN文章中,它引用承载方法的类,而不是方法的返回类型。

尝试将TypeName =“System.Data.DataTable”更改为TypeName =“BusinessLogic”

请参阅http://csharpdotnetfreak.blogspot.com/2009/06/gridview-objectdatasource-insert-update.html