我正在使用.NET Framework 4.0,Entity Framework 6.1.3和SQL Server 2012开发一个C#库。
我使用Ado.net
调用此存储过程:
CREATE PROCEDURE [dbo].[InsertCodes]
@codes as dbo.SerialAndValueList READONLY -- Codes
, @username nvarchar(50)
, @source nvarchar(50)
, @column2 tinyint
AS
Declare @codesCount int;
set nocount on;
-- =========== CODE =============
INSERT INTO Code (Serial, Column1, Column2, Column3, UserName, Source)
SELECT Serial, Column1, @column2, @column3, @username, @source FROM @codes
IF (@@ERROR != 0)
RETURN -1 -- Database error
RETURN 0
SerialAndValueList
:
CREATE TYPE [dbo].[SerialAndValueList]
AS TABLE
(
Serial nvarchar(20),
Column1 tinyint
)
我用它来存储1,000,000个序列号(@codes
有1,000,000行)。
我正在使用相同数量的代码对其进行测试,有时我会获得超时异常,有时则没有。
我发现文章Configure the remote query timeout Server Configuration Option暗示:
EXEC sp_configure 'remote query timeout', 0 ;
GO
RECONFIGURE ;
GO
但是如果我这样做,我想只在这个存储过程中(在开头)禁用它,并在离开之前重新启用它。
另一个问题是,在我运行存储过程后仅60秒发生超时但在此处读取remote query timeout Option,我看到默认值为600秒。
如何在数据库中获取远程查询超时选项的当前值?
或者,我该如何解决这个问题?
答案 0 :(得分:3)
远程XXX超时值与服务器上运行的传出远程查询的超时有关 - 例如对链接服务器的传出查询,这些设置对来自客户端的传入查询没有影响。
如果您想要更高的超时设置.CommandTimeout
,可在ObjectContext
& SqlCommand
。