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。

    原文链接

  • 相关阅读:
    【剑指offer】对称的二叉树
    【剑指offer】数组中的逆序对
    【剑指offer】不用加减乘除做加法
    【剑指offer】和为S的连续正数序列
    【剑指offer】删除链表中重复的结点
    【剑指offer】平衡二叉树
    Math.ceil()、Math.floor()和Math.round()
    document.querySelectorAll遍历
    JS选择器querySelector和~All,三个原生选择器
    js 操作select和option常见用法
  • 原文地址:https://www.cnblogs.com/OpenCoder/p/10307420.html
Copyright © 2011-2022 走看看