Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL命令";超时已过期“;处理ClientInsertServerInsert同步冲突时发生异常_Sql_Vb.net_Synchronization_Sql Server Ce - Fatal编程技术网

SQL命令";超时已过期“;处理ClientInsertServerInsert同步冲突时发生异常

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

我正在使用VS2010同步2个数据库(SQL Express和SQL Compact Edition)。当程序第一次运行时,它工作正常。但是,SQL命令“Timeout expired”异常在代码执行多次后发生。错误消息是:

超时已过期。操作完成前已过超时时间,或者服务器没有响应

下面是我处理冲突的代码。(编辑:根据这篇MSDN文章,这与客户端和服务器都插入具有相同主键值的行有关。这会导致主键冲突。)

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)"