数据库
首页 > 数据库> > c#-超时在数据库中插入1,000,000行(有时)

c#-超时在数据库中插入1,000,000行(有时)

作者:互联网

我正在使用.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秒.

如何获取数据库上远程查询超时选项的当前值?

或者,如何解决此问题?

解决方法:

远程XXX超时值与在服务器上运行的传出远程查询的超时有关-例如到链接服务器的传出查询时,设置对来自客户端的传入查询无效.

如果您想要更高的超时设置,可以在ObjectContext&中使用.CommandTimeout. SqlCommand.

标签:ado-net,c,sql-server
来源: https://codeday.me/bug/20191111/2020441.html