zoukankan      html  css  js  c++  java
  • ADO.NET的Connection Timeout和Command Timeout (转载)

    每次对数据库连接时,我们有时候会碰到连接超时或者命令超时,这两个超时是不一样的。以ADO.NET为例,当客户端和服务器端连接时,碰到的超时情况主要有下面几种:
    当从连接池获取一个连接时,碰到超时。
    当建立一个全新连接(而不是从连接池获取)时,碰到超时。
    当发送一个命令(command)到SQL Server时,超时。
    当发送命令(连接字符串带有“context connection=true”属性)到SQL Server时,超时。
    当不是显示的发送一个命令(implicitly)到SQL Server时,碰到超时。
    当执行异步命令时,(BeginExecute)碰到超时。
    当从服务器端,获取行时,碰到超时。
    当用Bulk copy方式,上传数据时,碰到超时。
    这些超时主要是通过连接字符串中的Connect Timeout和SqlCommand.CommandTimeout来进行控制。前面两种是登录超时由Connection Timeout来决定什么时候超时,后面几种是命令超时由Command Timeout来决定什么时候超时。

    SqlConnection.ConnectionTimeout :
    1. 说明: 获取在尝试建立连接时终止尝试并生成错误之前所等待的时间。
    2. 默认值:等待连接打开的时间(以秒为单位)。默认值为 15 秒。
    3. 备注:值 0 指示无限制
    4. 只读

    注意ConnectionTimeout可以在数据库连接字符串上直接进行设置,如下所示:

    Server=(localdb)mssqllocaldb;Database=yourDb;Trusted_connection=true;Connect Timeout=100;

    这也是目前使用EF Core时,设置ConnectionTimeout比较好的一种方式

    参考链接:

    SqlConnection.ConnectionTimeout Property

    SqlCommand.CommandTimeout :
    1. 说明:获取或设置在终止执行命令的尝试并生成错误之前的等待时间。
    2. 默认值:等待命令执行的时间(以秒为单位)。默认为 30 秒。
    3. 备注:值 0 指示无限制,在 CommandTimeout 中应避免值 0,否则会无限期地等待执行命令。
    4. 可读可写

    参考链接:

    SqlCommand.CommandTimeout Property

    在EF Core中可以通过DbContext来调用SetCommandTimeout和GetCommandTimeout方法,来设置和获取CommandTimeout的值,如下所示:

    DbContext dbContext = ...//创建DbContext对象
    
    dbContext.Database.SetCommandTimeout(100);
    int? commandTimeout = dbContext.Database.GetCommandTimeout();

    参考链接:

    RelationalDatabaseFacadeExtensions.GetCommandTimeout(DatabaseFacade) Method 

    RelationalDatabaseFacadeExtensions.SetCommandTimeout Method

    特别注意:
    "超时时间已到。在操作完成之前超时时间已过或服务器未响应"
    类似这种错误,一般是 SqlCommand.CommandTimeout  或者 SqlBulkCopy.BulkCopyTimeout 的时间超时, 而不是 SqlConnection.ConnectionTimeout。

    原文链接

  • 相关阅读:
    git常用指令 github版本回退 reset
    三门问题 概率论
    如何高效的学习高等数学
    数据库6 关系代数(relational algebra) 函数依赖(functional dependency)
    数据库5 索引 动态哈希(Dynamic Hashing)
    数据库4 3层结构(Three Level Architecture) DBA DML DDL DCL DQL
    梦想开始的地方
    java String字符串转对象实体类
    java 生成图片验证码
    java 对象之间相同属性进行赋值
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10307420.html
Copyright © 2011-2022 走看看