【问题标题】:ObjectDataSource 'ObjectDataSource1' could not find a non-generic method UpdateObjectDataSource 'ObjectDataSource1' 找不到非泛型方法更新
【发布时间】:2014-04-14 07:27:59
【问题描述】:

到目前为止,我尝试了所有类似问题的解决方案,但每次都收到此错误。 请帮忙!!

静态方法

[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();
}

网格视图

<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>

【问题讨论】:

  • 你在哪里声明updateCustomer
  • 你能给我们展示一下整个类结构以及命名空间和selectmethod和updatemethod吗?
  • 确保你的类名和命名空间

标签: c# asp.net gridview objectdatasource


【解决方案1】:

使用VS-2012 Express for WEB,我也遇到了这个问题,发现参数名称必须匹配的地方有四个-typed-data-set Designer(xsd),BLL-class update-function,aspx -designer 到“配置数据源”和 aspx 源文件。

首先,通过选择“将异常详细信息复制到剪贴板”来保存错误消息的副本,以便您可以在 NOTEPAD 中进行参考。将这些参数视为错误: 请注意,EMAIL 参数在被两个 * 包围时应为粗体。

  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" />
    

现在比较一下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 参数有许多不同之处,所有这些引用都需要具有相同的参数名称。

当您“重建解决方案”时,类型数据集将被更新,并且 BLL 类将被更新,但不会更新 aspx 中的 ObjectDataSource。重建解决方案后,您需要在 aspx-designer 页面上“配置数据源”。

在本例中,BLL 类需要包含一个“cCONTACT_EMAIL”作为参数并传递给适配器函数。

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多