再开贴 dataGridView 与数据库绑定

jcyluck 2009-04-23 05:13:34
数据库中的表是不可以有主键的,这是数据本身的限制
但查询出来后的表是可以设置主键的:
如:
原表:
C1 C2 C3
A AA AB
A BA BB
B AA AB
B BA BB

查询C1列只为A的记录(假设为 A表)

C2 C3
AA AB
BA BB

C2列可以保证不存在重复记录,从而可以设置主键

将A表与dataGridView绑定,如何采用adapter.Update()更新?
或者用其他效率比较高的方法

原贴:http://topic.csdn.net/u/20090422/15/36acd1c0-dc7b-4aa1-84c5-53f964d524df.html

...全文
223 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
jcyluck 2009-04-28
  • 打赏
  • 举报
回复
再顶
大家继续发表宝贵意见
duping9626 2009-04-27
  • 打赏
  • 举报
回复
自已配置adapter,可以避免必需要主键的问题
adapter.InsertComamnd=...
快40的码农 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 wf5360308 的回复:]
使用adapter.Update()更新的前提之一就是必须要有主键!
[/Quote]
正解
yongyupost2000 2009-04-27
  • 打赏
  • 举报
回复
顶一顶
sky_teamsoft 2009-04-27
  • 打赏
  • 举报
回复
UP
sushou2009 2009-04-27
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 viki117 的回复:]
adapter.Update()只前,你要先定义SqlDataAdapter,并定义好SelectCommand、UpdateCommand、DeleteCommand,
然后要把SelectCommand得到的DateSet修改够传会来给SqlDataAdapter,再Update()方法;
或者你先定义好SelectCommand,然后用Build功能自动生成UpdateCommand、DeleteCommand方法;
说来说去,必须定义好了SqlDataAdapter的SelectCommand、UpdateCommand、DeleteCommand,才可以获取数据集(ds)并修改其中的数据后,采…
[/Quote]
UP!
_see_you_again_ 2009-04-27
  • 打赏
  • 举报
回复
在表中将C1 C2同时设为主键
zx_lxq 2009-04-27
  • 打赏
  • 举报
回复
学习
jcyluck 2009-04-27
  • 打赏
  • 举报
回复
自己顶一下
zealot1021 2009-04-24
  • 打赏
  • 举报
回复
查询出来以后把结果集封装进List,再循环赋值,不要直接绑定啊
fdc123 2009-04-24
  • 打赏
  • 举报
回复
没有主键? 好像必须要有主键吧 是在不行加一个ID列当主键呀
jcyluck 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 mafgm 的回复:]
使用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 sq…
[/Quote]

那我还不如直接循环dataGridView或查询出来的表呢
就不需要用实体类了
主要是我觉得循环的效率太低了
mafgm 2009-04-24
  • 打赏
  • 举报
回复
使用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)"
}
可能效率会低一点,单你没有主键怎么做效率也肯定高不了
shenmixiaozi 2009-04-24
  • 打赏
  • 举报
回复
看看学习学习
chyyyin 2009-04-24
  • 打赏
  • 举报
回复
学习!
535cheng110 2009-04-24
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 showyoumymercy 的回复:]
引用 1 楼 wf5360308 的回复:

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


[/Quote]
jcyluck 2009-04-24
  • 打赏
  • 举报
回复
实体类?
不明白
能不能说详细点
zhujinbo 2009-04-24
  • 打赏
  • 举报
回复
说实话没怎么看明白
泡面之夏 2009-04-24
  • 打赏
  • 举报
回复
学习
viki117 2009-04-24
  • 打赏
  • 举报
回复
绑定数据的时候直接用 ds.table["name"],这样修改datagridview中的值,就会直接修改ds.table["name"]中的值,然后直接UPDATE就好,不需要逐一去对应。。
用多了delphi的人,就比较喜欢这样的方法。。个人不建议这样用。。
加载更多回复(9)

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧