夜深了,发个帖子吧,又纠结了一晚上,求大神给个了断...数据库与winform的
我用select语句找出SQLServer数据库中某个表的数据。再绑定到datagridview上
如下图:
用鼠标点击某一条数据,然后我去操作他(修改或者是删除),如上面那张如狗屎般的表怎么能确定他具体是操作的数据库中的哪一条数据。我逻辑部分都写好了,就差SQL语句了。
之前写的如(UPDATE a SET column2='2' FROM (SELECT *,ROW_NUMBER() OVER(ORDER BY column2) AS a FROM Table_1) AS a WHERE a=2)
都不能准确的完成操作。望大神能够给出完美的答案。
------解决方案--------------------在sql语句返回的数据中,不应该只有两列,应该还有表的一个主键,假设为id,那么你select的时候应该包括id,column1,column2,只是你可以不显示到winform中,当你点击某一个数据的时候,就可以拿到对应的id,然后到数据库操作,如果没有主键,对于你这个应用,我觉得还是建上去好,不然数据的唯一标识可能不准确
------解决方案--------------------界面上对datagridview的新增,修改,删除后,可调用SqlDataAdapter的Update()方法更新到数据库.
------解决方案--------------------这个数据看着,两列的值都差不多,很容易看错。
如果可以的话,可以加一个identity(1,1) 列,并且设置为primary key:
alter table 表
add id int identity(1,1) primary key
由于这个id是自增列,且唯一的,所以在进行delete,update操作时,就只需要这样了:
delete from 表 where id = xxx
update 表
set column1 = xxx
where id = xxx
这样就比较准确,那个row_number的方法,一般也是可用的,但可能不够准确的。
------解决方案--------------------SELECT出来的数据应该包含一个ID,该ID可以不显示在 DataGridView 上。
------解决方案--------------------这应该是程序端的问题
建议到.net版问问看
------解决方案--------------------数据库中 必须有主见列,把主键列绑定到 dgv上 在执行 update 的时候 获取主键列的值,按照主键列的值更新就可以了
------解决方案--------------------查询出来的时候,把主键id 隐藏,不显示到winform,操作的时候根据点击的id来进行操作