我现在把数据表简单化,以方便反应问题有2张表,一张人员表person,一张部门表departmentperson字段
   person_id
   job_numb   工号
   name       姓名
   department_iddepartment
   department_id
   dep_name  部门
数据适配器的selectcommand这样写
select job_numb as 工号,name as 姓名,dep_name as 部门
from person left outer join department
     on person.department_id = department.department_id
InsertCommand这样写
INSERT INTO person (job_numb, name)
VALUES (@job_numb,@name)UpdateCommand这样写
UPDATE person
SET job_numb = @job_numb, name = @name
WHERE (person_id = @Original_person_id)我这样在数据集里面设置好DataTable1这样表的命令以后,编译完成就有这张表对应的数据适配器dataTableAdapter1与数据集person1,并且form窗口上有2个textbox分别绑定job_numb与name。然后下面是我的代码构造函数里面,启动窗口的时候代码是这样cmOrders = (CurrencyManager)BindingContext[person1, "DataTable1"];
cmOrders.AddNew();我的窗口上面全是textbox单源绑定,属性里面已经添加了绑定,
然后我点确定更新
cmOrders.EndCurrentEdit();  if (person1.GetChanges() != null)
  {
  try
  { //SqlDataAdapter
  personTableAdapter1.Update(person1);
  }
  catch (Exception ex)
  {
  MessageBox.Show(ex.ToString(), "提示", MessageBoxButtons.OK, MessageBoxIcon.Error);
  person1.RejectChanges();
  }
  }更新总是出错,好像似乎要我对所有的textbox都进行填值一样,"被准备的语句 需要参数@job_numb,但未提供该参数"
我是在textbox里面填了值以后才点确定的,怎么还会有这样的错误?如果我不关联department表,只有person一张表,上面的所有操作都是可以得,不解很不解,困扰很多天了,麻烦各位,很需要解决这个问题

解决方案 »

  1.   

    提示说了,没提供@job_numb参数,你确认提供了吗,你的代码中看不到这些
      

  2.   

    调用sql语句的相关代码没有看到。
      

  3.   

    我知道,我确实在绑定job_numb的textbox里面填了值了,为什么还爆这个错误,不明白,如果只是单一的一张表person不关联的话,这段代码就不会出错
      

  4.   

    Parameter[] 在哪儿?赋值呢《Csdn收音机》集成截图功能,发帖更加生动!
      

  5.   


     personTableAdapter1.Update(person1);
    这行就是数据适配器调用sql代码啊,只是我一般用控件直接拖,不会说在.cs里面写SQL代码,效果一样的,我那样做方便,但是不明白为什么有错
      

  6.   

    绑定字段的textbox有填值以后才 确定更新的
      

  7.   

    我不使用datatable,当然也就不使用datatableadapter。所以我给你的建议也只能到此:直接使用ado.net更新数据库吧datatableadapter只用来查询数据。
      

  8.   

    基本上是因为你select出来的是4个字段,而更新数据库时不是4个而只是2个字段。datatableadapter怎么使用在这种情况,我就不知道了。