标签: command-timeout

如何使用Session.Query设置Nhibernate LINQ命令超时

有人知道设置UnderlyingCriteria何时使用的方法Session.Query

我正在尝试为一个特定查询设置更严格的命令超时(或查询超时),我试图避免在会话中的连接或其他查询上添加该约束.

我发现在旧QueryOver功能中你可以使用这样的东西

// QueryOver returns a IQueryOver<T,T> an nHibernate class 
// with access to UnderlyingCriteria

var query = Session.QueryOver<Puppy>();
query.UnderlyingCriteria.SetTimeout(120); 
Run Code Online (Sandbox Code Playgroud)

问题在于它是旧的,有缺陷的,只是有一大堆功能问题.

使用Query返回IQueryable<T>

 var query = (from c in Session.Query<Puppy>());
Run Code Online (Sandbox Code Playgroud)

IQueryable 是一个MS类,没有明显的命令超时访问权限等.

另一种选择是以某种方式为所有命令设置会话命令超时,此时,然后恢复为默认值,但我没有看到任何公共机制来执行此操作,除了先设置命令超时并将其保留,比较如何为NHibernate LINQ语句设置超时

c# linq nhibernate timeout command-timeout

5
推荐指数
1
解决办法
5084
查看次数

Oracle .net Provider CommandTimeout 不起作用

我正在尝试更改 OracleCommand 查询的命令超时,但它不起作用,因此不会触发超时异常。

  • 使用 Oracle.ManagedDataAccess.dll (4.121.2.0)

    using (OracleConnection _connection = new OracleConnection(connectionString))
    {
    
        using(OracleCommand command = _connection.CreateCommand())
        {
    
          command.CommandText = commandText;
          command.CommandTimeout = 10;
    
         _connection.Open();
          using(OracleDataReader reader = command.ExecuteReader())
          {
              while (reader.Read())
              {
                    Console.WriteLine(reader.GetValue(0));
              }
           }
        } }
    
    Run Code Online (Sandbox Code Playgroud)

配置:

<configSections>
    <section name="entityFramework"
      type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
      requirePermission="false"/>
    <section name="oracle.manageddataaccess.client"
      type="OracleInternal.Common.ODPMSectionHandler, Oracle.ManagedDataAccess, Version=4.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
  </configSections>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5"/>
  </startup>
  <entityFramework>
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework"/>
    <providers>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"/>
      <provider invariantName="Oracle.ManagedDataAccess.Client"
        type="Oracle.ManagedDataAccess.EntityFramework.EFOracleProviderServices, Oracle.ManagedDataAccess.EntityFramework, Version=6.121.2.0, Culture=neutral, PublicKeyToken=89b483f429c47342"/>
    </providers>
  </entityFramework>
  <system.data> …
Run Code Online (Sandbox Code Playgroud)

.net oracle command-timeout

5
推荐指数
1
解决办法
2495
查看次数

EF Core 命令超时未生效

我发现该DatabaseFacade.SetCommandTimeout方法和该SqlServerDbContextOptionsBuilder.CommandTimeout方法都对我的代码没有任何影响,而是长时间运行的 SQL 命令只是无限期地继续。

我的上下文对象看起来像这样:

public class MyDataContext : DbContext
{
    public MyDataContext()
    {
        base.Database.SetCommandTimeout(60);
    }

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    {
        ...
        optionsBuilder.UseSqlServer(connection, sqlServerOptions => sqlServerOptions.CommandTimeout(60));
    }
}
Run Code Online (Sandbox Code Playgroud)

但是当我在 Web API 中执行代码时:


using var dbContext = new MyDataContext();
var timeout = dbContext.Database.GetCommandTimeout(); // this, as expected, returns "60"
var listOfEntities = dbContext.MyLargeSetOfEntities.ToList(); // this, however, just runs way longer than a minute (it is returning an immense amount of data to test the timeout)

Run Code Online (Sandbox Code Playgroud)

是否有什么地方可以覆盖这个值并使其不确定?

c# entity-framework command-timeout entity-framework-core

5
推荐指数
1
解决办法
3524
查看次数

SMO ConnectionContext.StatementTimeout设置被忽略

我成功地使用Powershell和SMO来备份大多数数据库.但是,我有几个大型数据库,其中收到"超时"错误"System.Data.SqlClient.SqlException:Timeout expired".时间一直发生在10分钟.我已经尝试将ConnectionContext.StatementTimeout设置为0,6000,并设置为[System.Int32] :: MaxValue.设置没有任何区别.我发现了许多Google引用,表明将其设置为0会使其无限制.无论我尝试什么,超时都会持续发生在10分钟.我甚至将服务器上的远程查询超时设置为0(通过Studio Manager)无济于事.下面是我的SMO连接,我设置了超时和实际的备份功能.下面是我脚本的输出.

更新 有趣的是,我使用VS 2008在C#中编写了备份函数,并且超时覆盖在该环境中工作.我正在将C#进程合并到我的Powershell脚本中,直到我找到为什么超时覆盖不能仅与Powershell一起使用.这非常烦人!

function New-SMOconnection {
    Param ($server, 
        $ApplicationName= "PowerShell SMO", 
        [int]$StatementTimeout = 0
    )
#    Write-Debug "Function: New-SMOconnection $server $connectionname $commandtimeout"
    if (test-path variable:\conn) {
        $conn.connectioncontext.disconnect()
    } else {
        $conn = New-Object('Microsoft.SqlServer.Management.Smo.Server') $server
    }
    $conn.connectioncontext.applicationName = $applicationName
    $conn.ConnectionContext.StatementTimeout = $StatementTimeout
    $conn.connectioncontext.Connect()
    $conn
}

$smo = New-SMOConnection -server $server
if ($smo.connectioncontext.isopen -eq $false) {
    Throw "Could not connect to server $($server)."
}

Function Backup-Database {
Param([string]$dbname)
$db = $smo.Databases.get_Item($dbname)
if (!$db) {"Database $dbname was …
Run Code Online (Sandbox Code Playgroud)

sql-server backup smo powershell-2.0 command-timeout

3
推荐指数
1
解决办法
8495
查看次数

超时设置为无限时间时超时异常

在我的C#.NET 3.5应用程序中,我在NHibernate上使用CastleProject ActiveRecord.这是使用MS SQL Server 2008的桌面应用程序.我已将ADO命令超时设置为0以防止批量操作期间的超时异常:

  <activerecord>
    <config>
      ...
      <add key="hibernate.command_timeout" value="0" />
    </config>
  </activerecord>

  <hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
      ...
      <property name="command_timeout">0</property>
    </session-factory>
  </hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

但是,我仍然收到超时异常!NHibernate日志显示如下:

在某处开始:

2010-10-02 06:29:47746 INFO NHibernate.Driver.DriverBase - 设置ADO.NET命令超时为0秒

到最后的某个地方:

2010-10-02 07:36:03020 DEBUG NHibernate.AdoNet.AbstractBatcher - 闭IDbCommand的,开放的IDbCommand S:0 2010-10-02 07:36:03382 ERROR NHibernate.Event.Default.AbstractFlushingEventListener - 无法SYN chronize数据库状态与会话NHibernate.HibernateException:执行批处理查询---> System.Data.S qlClient.SqlException时发生异常:超时过期.操作完成之前经过的超时时间或服务器没有响应.在System.Data.SqlClient.SqlConnection.OnError(SqlException异常,布尔breakConnection)

怎么会?如何解决这个问题?

nhibernate timeout castle-activerecord sqlexception command-timeout

3
推荐指数
1
解决办法
9545
查看次数

手动增加SQL Server命令超时

我有一个测试Windows主机(50 MB),它服务于我的ASP.NET Web应用程序,它工作得很好,但在升级到100 MB后,我在尝试从Visual远程连接SQL服务器时经常出现SQL服务器超时错误工作室(即在我的网站的本地开发中),我试图手动增加SQL命令超时,我认为它以某种方式解决了,但我认为我的行为不对,当然我的网站查看者在查看页面时没有问题一切都适合最终用户,我只是在开发网站和通过VS2010访问我的远程数据库时遇到问题,我真的应该考虑增加超时吗?如何全局增加超时?我应该为每个SQL命令设置commandtimeout属性吗?是否可以在连接字符串中增加它?当然,因为我目前正在使用共享主机,所以我无法更改SQL Server管理工作室设置

请指导我这个问题因为我对超时属性没有好感!谢谢

sql-server command-timeout

3
推荐指数
1
解决办法
4675
查看次数