符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
用update语句直接更新,有时候打开表修改表中的数据会报这种错误
创新互联是一家朝气蓬勃的网站建设公司。公司专注于为企业提供信息化建设解决方案。从事网站开发,网站制作,网站设计,网站模板,微信公众号开发,软件开发,微信小程序开发,10多年建站对石雕等多个方面,拥有多年的网站制作经验。
这个是你的工作么,这个问题应该不难,
针对你的三个问题给你三个解决方案:
写一个查询语句个ado控件,然后连接connection控件就可以了,
使用合适的支持多选的客户端表格控件控件可以实现;
写一个循环遍历你的ado控件检测是否选中的标记,对于选中的记录一个update语句就搞定了
问题都不难,应该不困难。
你理解错了!
默认sqlserver都是行数据锁定,隔离级别是 read commited 也就是读取可 提交数据。
我给你举个例子!
SELECT TOP 1000
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
显示结果
-----------------------------------------------
ID DeleteBy DelDate
1 admin 2008-04-13 00:00:00.000
2 admin 2008-05-04 00:00:00.000
-------------------------------------------------
表数据就两行
然后我做如下操作:
打开 SQL Server Management Studio
输入:
begin transaction
DELETE FROM [HMS].[dbo].[DeleteLog]
where ID='1'
在另一个窗口中:
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1
你发现 这一个窗口被阻塞了,
但是查询
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=2
可以正确返回结果。 这充分证明了,sqlserver默认隔离级别是行数据锁定。
然后你此时在第一个删除窗口 中输入
rollback
,记住前面的删除不执行,只执行rollback。
此时看一下查询
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1
那个窗口的结果已经出来了,阻塞被解除了。
========================================
当然了!你执行了全表检索肯定也是被阻塞的,因为删除操作还没提交啊,检索数据中又包含了你要删除的数据,当然被阻塞了。
你的问题出现在哪里了,你应该明白了吧!
解决这个问题其实很简单,不要长事务占用。检索的时候避开要删除的数据。
当然也可以改变隔离级别,sqlserver分为两类隔离级别,改成非阻塞类就可以。
但是我个人不推荐这么做。改变隔离级别可以如下方式:
set transaction isolation level read uncommitted
begin transaction
DELETE FROM [HMS].[dbo].[DeleteLog]
where ID='1'
这个删除没有提交
检索的时候
set transaction isolation level read uncommitted
SELECT
[ID]
,[DeleteBy]
,[DelDate]
FROM [dbo].[DeleteLog]
where ID=1
根本不会阻塞。 比较顺利,删除更新也一样。
这种方式 适合 数据量庞大的社交,天文数据库,企业管理不适合。
可以从侧面看出,你的程序并不优良,明白了否?
不知你用什么提交的,如果是软件,也许软件先提示后修改,如果是在查询分析器里边,修改了一定会立即变化的。是不是你查看的方式有问题?
死锁中的其中一种情况吧。
1.建立“锁定表”,每当用户进行评价时,在"锁定表"中设定评价事项的状态,比如0代表无人评价,1代表正在评价中。当状态为1时,则表示已有用户在进行评价,当用户退出评价或锁定时间超过一个阈值时则删除锁定记录,允许其他用户进行评价并锁定。
这样处理适合锁定多行相关数据,锁定表中也可以保存其他附加信息。
2.试试使用事务来更新数据库吧,这样可以确保在同一时间只允许一个用户可以对行进行更新。这个可以在存储过程中加以限定,或者在你的类库中写更新的方法时,可以引入事务啊。
SqlConnection conn = new SqlConnection("你的连接字符串");
conn.Open();
SqlTransaction trans = conn.BeginTransaction();
...
int result = cmd.ExecuteNonQuery();
if(result !=-1)
{
trans.Commit();
}
conn.Close();
//可以运用try...catch...finally错误处理机制来控制该事务的提交或者回滚。
当然,提供的方法仅供参考。呵呵