使用 SQL Server 2012 的远程连接字符串部署的 Windows 应用程序存在一个奇怪的问题。
插入记录时,SQL Server 在相对较短的时间后超时,提示“等待操作超时”。我无法调试已部署的应用程序以找出发生这种情况的原因以及发生在代码中的位置。
但是,当我在开发计算机上使用相同的数据库和本地连接时,我不会收到此错误。
一般使用的代码是:
void MapData( SqlTransaction transaction, Dictionary<int, IDataObject> items )
{
foreach ( var i in items )
{
transaction.Save( "CHECKPOINT" );
try
{
ImportItem( transaction, i );
}
catch ( Exception e )
{
transaction.Rollback( "CHECKPOINT" );
}
}
ReportStatus();
}
虽然这段代码一直有效,但我不确定远程连接。我们只有这一种情况不起作用。
它可能是什么? 是否有比在循环中使用 Save() 和 Rollback() 更可靠或更高效的方法? 我不想使用 TransactionScope 来生成新的“子”交易。
谢谢!
您的事务花费的时间太长(不确定是提交还是回滚)。为了理解为什么您必须“运行跟踪”才能获取性能指标。 但是要使其正常工作,您可以增加超时时间。将
SqlCommand
CommandTimeout设置为更大的值或 0(无超时)。此外,连接超时用于事务超时 - 通常仅在昂贵的回滚时才会出现问题。您可以在连接字符串中指定它,例如
Connection Timeout=30
。