【问题标题】:System.InvalidOperationException: ObjectDataSource 'ObjectDataSource1' could not find a non-generic method 'updateEmp' that has parameters:System.InvalidOperationException:ObjectDataSource 'ObjectDataSource1' 找不到具有参数的非泛型方法 'updateEmp':
【发布时间】:2017-03-12 09:02:37
【问题描述】:

我在尝试从 gridview 更新数据时收到此错误:

System.InvalidOperationException: ObjectDataSource 'ObjectDataSource1' 找不到具有参数的非泛型方法“updateEmp”: id, name, u_name, pass, mail, address, city, dob, cnic, designation, ph_no、emp_name、emp_id。

这是我的对象数据源的 Asp 代码

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" DeleteMethod="deleteEmp" SelectMethod="GetAllEmployees" TypeName="fmsWeb.datagridDemo" UpdateMethod="updateEmp" ConflictDetection="OverwriteChanges">
                <DeleteParameters>
                    <asp:Parameter Name="emp_id" Type="String" />
                </DeleteParameters>
                <UpdateParameters>
                    <asp:Parameter Name="id" Type="String" />
                    <asp:Parameter Name="name" Type="String" />
                    <asp:Parameter Name="u_name" Type="String" />
                    <asp:Parameter Name="pass" Type="String" />
                    <asp:Parameter Name="mail" Type="String" />
                    <asp:Parameter Name="address" Type="String" />
                    <asp:Parameter Name="city" Type="String" />
                    <asp:Parameter Name="dob" Type="String" />
                    <asp:Parameter Name="cnic" Type="String" />
                    <asp:Parameter Name="designation" Type="String" />
                    <asp:Parameter Name="ph_no" Type="String" />
                </UpdateParameters>
            </asp:ObjectDataSource>

这是我定义方法的类代码

 public static List<Employees> GetAllEmployees()
 {
    List<Employees> listemp = new List<Employees>();

    using (MySqlConnection con = new MySqlConnection(@"server=127.0.0.1;user id=root;database=fms"))
    {
       MySqlCommand cmd = new MySqlCommand("Select * from emp", con);
       con.Open();
       MySqlDataReader dr = cmd.ExecuteReader();
       while (dr.Read())
       {
           Employees em = new Employees();
           em.emp_id = dr[0].ToString();
           em.emp_name = dr[1].ToString();
           em.u_name = dr[2].ToString();
           em.pass = dr[3].ToString();
           em.mail = dr[4].ToString();
           em.address = dr[5].ToString();
           em.city = dr[6].ToString();
           em.dob = dr[7].ToString();
           em.cnic = dr[8].ToString();
           em.designation = dr[9].ToString();
           em.ph_no = dr[10].ToString();
           listemp.Add(em);
       }

    }
    return listemp;
}

public static void deleteEmp(String emp_id)
{
   using (MySqlConnection con = new MySqlConnection(@"server=127.0.0.1;user id=root;database=fms"))
   {
                MySqlCommand cmd = new MySqlCommand("Delete from emp where emp_id=@empID", con);
                MySqlParameter param = new MySqlParameter("empID", emp_id);
                cmd.Parameters.Add(param);
                con.Open();
                cmd.ExecuteNonQuery();
   }
}

public static string updateEmp(String id, String name, String u_name, String pass, String mail, String address, String city, String dob, String cnic, String designation,String ph_no)
{
   using (MySqlConnection con = new MySqlConnection(@"server=127.0.0.1;user id=root;database=fms"))
   {
      MySqlCommand cmd = new MySqlCommand("UPDATE `emp` SET `emp_id`= @id,`emp_name`=@name,`u_name`=@u_name,`pass`=pass,`mail`=@mail,`address`=@address,`city`=@city,`dob`=@dob,`cnic`=@cnic,`designation`=@designation,`ph_no`=@ph_no WHERE emp_id=@id",con);
      MySqlParameter paramID = new MySqlParameter("@id", id);
      cmd.Parameters.Add(paramID);
      MySqlParameter pname = new MySqlParameter("@name", name);
      cmd.Parameters.Add(pname);
      MySqlParameter pu_name = new MySqlParameter("@u_name", u_name);
      cmd.Parameters.Add(pu_name);
      MySqlParameter p_pass = new MySqlParameter("@pass", pass);
      cmd.Parameters.Add(p_pass);
      MySqlParameter pmail = new MySqlParameter("@mail", mail);
      cmd.Parameters.Add(pmail);
      MySqlParameter add = new MySqlParameter("@address", address);
      cmd.Parameters.Add(add);
      MySqlParameter pcity = new MySqlParameter("@city", city);
      cmd.Parameters.Add(pcity);
      MySqlParameter pdob = new MySqlParameter("@dob", dob);
      cmd.Parameters.Add(pdob);
      MySqlParameter pcnic = new MySqlParameter("@cnic", cnic);
      cmd.Parameters.Add(pcnic);
      MySqlParameter desig = new MySqlParameter("@designation", designation);
      cmd.Parameters.Add(desig);
      MySqlParameter ph = new MySqlParameter("@ph_no", ph_no);
      cmd.Parameters.Add(ph);
      con.Open();
      int i=cmd.ExecuteNonQuery();
      return Convert.ToString(i);
   }
}

选择和删除方法运行良好,但更新时出现错误

【问题讨论】:

    标签: c# asp.net


    【解决方案1】:

    您的Emloyee 对象没有idname 属性。 它有emp_idemp_name

    更改参数以反映这一点:

    而不是这个:

    <asp:Parameter Name="id" Type="String" />
    <asp:Parameter Name="name" Type="String" />
    

    这样做:

    <asp:Parameter Name="emp_id" Type="String" />
    <asp:Parameter Name="emp_name" Type="String" />
    

    【讨论】:

    • 但我有 id 和 name 请参阅public static string updateEmp(String id, String name, String u_name, String pass, String mail, String address, String city, String dob, String cnic, String designation,String ph_no)
    • 所以我只需要更改这两个??
    【解决方案2】:

    将您的查询更改为:

    "UPDATE emp SET emp_name=@name,u_name=@u_name,pass=@pass,mail=@mail,address=@address,city=@city,dob=@dob,cnic=@cnic,designation=@designation,ph_no=@ph_no WHERE emp_id=@id"
    

    因为你的搜索约束是 id,最好避免更新它,以防它是主键或唯一键

    【讨论】:

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