SQL命令";超时已过期“;处理ClientInsertServerInsert同步冲突时发生异常
我正在使用VS2010同步2个数据库(SQL Express和SQL Compact Edition)。当程序第一次运行时,它工作正常。但是,SQL命令“Timeout expired”异常在代码执行多次后发生。错误消息是: 超时已过期。操作完成前已过超时时间,或者服务器没有响应 下面是我处理冲突的代码。(编辑:根据这篇MSDN文章,这与客户端和服务器都插入具有相同主键值的行有关。这会导致主键冲突。)SQL命令";超时已过期“;处理ClientInsertServerInsert同步冲突时发生异常,sql,vb.net,synchronization,sql-server-ce,Sql,Vb.net,Synchronization,Sql Server Ce,我正在使用VS2010同步2个数据库(SQL Express和SQL Compact Edition)。当程序第一次运行时,它工作正常。但是,SQL命令“Timeout expired”异常在代码执行多次后发生。错误消息是: 超时已过期。操作完成前已过超时时间,或者服务器没有响应 下面是我处理冲突的代码。(编辑:根据这篇MSDN文章,这与客户端和服务器都插入具有相同主键值的行有关。这会导致主键冲突。) Dim conflictTableName As String=e.TableMetadata
Dim conflictTableName As String=e.TableMetadata.TableName.ToString
Dim SERVERCONCLICTDT,CLIENTCONCLICTDT作为数据表
Dim clientConflictID为Int16
将新ID变暗为Int16
Dim SqlCon作为新的SqlConnection
clientConflictDT=e.Conflict.ClientChange
serverConflictDT=e.Conflict.ServerChange
如果e.Conflict.ConflictType=ConflictType.ClientInsertServerInsert,则
SqlCon=新的SqlConnection(STR\u SQL\u CON)
使用SqlCon
如果SqlCon.State=ConnectionState.Closed,那么SqlCon.Open()
MsgBox(SqlCon.PacketSize.ToString&vbNewLine&conflictTableName.ToString)
Dim sqlStr=“选择最大值(ID)为NULL时的大小写,然后选择0 ELSE MAX(ID)+1 END FROM”&冲突表名
Dim sqlcmd作为新的SqlCommand(sqlStr、SqlCon)
sqlcmd.CommandTimeout=2
new_ID=sqlcmd.ExecuteScalar'我想这是由数据库锁引起的。在我从中修改SQL SELECT语句之后
"SELECT CASE WHEN MAX(ID) IS NULL THEN 0 ELSE MAX(ID)+1 END FROM " & conflictTableName
到
然后问题就解决了
无论如何,感谢所有的评论:-)增加commandtimeout属性值。我试图将超时值更改为0,但在您使用sql compact edition的链接服务器时仍然无法移动。共享用于连接两个sql server的连接字符串。您在哪一行代码上遇到问题。修改sql compact edition command.sqlprofiler的命令超时以跟踪导致问题的值?它是导致主键冲突还是命令超时?
"SELECT CASE WHEN MAX(ID) IS NULL THEN 0 ELSE MAX(ID)+1 END FROM " & conflictTableName
"SELECT CASE WHEN MAX(ID) IS NULL THEN 0 ELSE MAX(ID)+1 END FROM " & conflictTableName & " WITH (NOLOCK)"