数据库中的表是不可以有主键的,这是数据本身的限制
但查询出来后的表是可以设置主键的:
如:
原表:
C1     C2     C3
A       AA     AB
A       BA     BB
B       AA     AB
B       BA     BB查询C1列只为A的记录(假设为 A表)C2     C3
AA     AB
BA     BBC2列可以保证不存在重复记录,从而可以设置主键将A表与dataGridView绑定,如何采用adapter.Update()更新?
或者用其他效率比较高的方法原贴:http://topic.csdn.net/u/20090422/15/36acd1c0-dc7b-4aa1-84c5-53f964d524df.html

解决方案 »

  1.   

    使用adapter.Update()更新的前提之一就是必须要有主键!
      

  2.   

    使用实体类,用SQL语句联查后先塞到实体类里,再绑定到dataGridView里。
      

  3.   

    更新的时候,把实体类当参数传进方法里,分别update到2张表里
      

  4.   

    使用adapter.Update()更新的前提之一就是必须要有主键!如果你的表没有主键就别用adapter.Update()做更新了!定义实体类:
    public class Module
    {
        public string C2{set;get;}
        public string C3{set;get;}
    }
    1.获取记录 List<Module> 并绑定到datagridview
    2.然后在根据datagridview的变化来更改List<Module> 
    3.删除C1=a的记录然后在根据List<Module>插入数据;
     foreach( Module m in  List<Module>)
    {
       string sql="insert a(c1,c2,c3)values(a,m.c2,m.c3)"
    }
    可能效率会低一点,单你没有主键怎么做效率也肯定高不了
      

  5.   


    那我还不如直接循环dataGridView或查询出来的表呢
    就不需要用实体类了
    主要是我觉得循环的效率太低了
      

  6.   

    查询出来以后把结果集封装进List,再循环赋值,不要直接绑定啊
      

  7.   

    adapter.Update()只前,你要先定义SqlDataAdapter,并定义好SelectCommand、UpdateCommand、DeleteCommand,
    然后要把SelectCommand得到的DateSet修改够传会来给SqlDataAdapter,再Update()方法;
    或者你先定义好SelectCommand,然后用Build功能自动生成UpdateCommand、DeleteCommand方法;
    说来说去,必须定义好了SqlDataAdapter的SelectCommand、UpdateCommand、DeleteCommand,才可以获取数据集(ds)并修改其中的数据后,采用adapter.Update(ds)
    暂时没例子,学会baidu和google吧
      

  8.   

    绑定数据的时候直接用 ds.table["name"],这样修改datagridview中的值,就会直接修改ds.table["name"]中的值,然后直接UPDATE就好,不需要逐一去对应。。
    用多了delphi的人,就比较喜欢这样的方法。。个人不建议这样用。。
      

  9.   

    自已配置adapter,可以避免必需要主键的问题
    adapter.InsertComamnd=...