当我在Web应用程序中运行查询时,返回一个null
值。而在SQL管理工具中直接运行相同的查询却能返回结果。
我认为问题是超时导致的。如何增加 Web 应用程序中查询执行的时间?在我的 web.config
:connectionstring
中没有超时代码。如果我在那里选择一个超时时间,那会影响到系统的其他部分吗?
当我在Web应用程序中运行查询时,返回一个null
值。而在SQL管理工具中直接运行相同的查询却能返回结果。
我认为问题是超时导致的。如何增加 Web 应用程序中查询执行的时间?在我的 web.config
:connectionstring
中没有超时代码。如果我在那里选择一个超时时间,那会影响到系统的其他部分吗?
你可以做一件事情。
例如:- 在appsettings.config中 ->
<appSettings>
<add key="SqlCommandTimeOut" value="240"/>
</appSettings>
在代码中 ->
command.CommandTimeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SqlCommandTimeOut"]);
应该可以了。
注意:- 当我使用来自微软应用程序块的SqlHelper类时,我遇到了大多数超时问题。如果您在代码中使用它并且遇到超时问题,最好使用sqlcommand并像上面描述的那样设置其超时时间。对于所有其他情况,sqlhelper应该可以胜任。如果您的客户可以接受比sqlhelper类提供的等待时间长一点的话,您可以继续使用上述技术。
例如:
使用这个 -
SqlCommand cmd = new SqlCommand(completequery);
cmd.CommandTimeout = Convert.ToInt32(System.Configuration.ConfigurationManager.AppSettings["SqlCommandTimeOut"]);
SqlConnection con = new SqlConnection(sqlConnectionString);
SqlDataAdapter adapter = new SqlDataAdapter();
con.Open();
adapter.SelectCommand = new SqlCommand(completequery, con);
adapter.Fill(ds);
con.Close();
不要使用
DataSet ds = new DataSet();
ds = SqlHelper.ExecuteDataset(sqlConnectionString, CommandType.Text, completequery);
更新:还请参考下面@Triynko的回答。那也很重要。
namespace ROS.WebService.Common
{
using System;
using System.Configuration;
using System.Data;
using System.Data.SqlClient;
public static class DataAccess
{
public static string ConnectionString { get; private set; }
static DataAccess()
{
ConnectionString = ConfigurationManager.ConnectionStrings["ROSdb"].ConnectionString;
}
public static int ExecuteNonQuery(string cmdText, CommandType cmdType, params SqlParameter[] sqlParams)
{
using (SqlConnection conn = new SqlConnection(DataAccess.ConnectionString))
{
using (SqlCommand cmd = new SqlCommand(cmdText, conn) { CommandType = cmdType, CommandTimeout = conn.ConnectionTimeout })
{
foreach (var p in sqlParams) cmd.Parameters.Add(p);
cmd.Connection.Open();
return cmd.ExecuteNonQuery();
}
}
}
}
}
将连接字符串中的超时值“复制”到命令超时属性中进行更改:CommandTimeout = conn.ConnectionTimeout
SQL Server没有在连接字符串中控制查询超时的设置,据我所知其他主要数据库也是如此。但是,这似乎不是您遇到的问题:如果真的有超时执行查询,我会期望看到引发异常。
错误:System.Data.SqlClient.SqlException:超时已过期。操作完成之前超时时间已过或服务器无响应。
如果确实出现了问题,您可以将SQL Server数据库的默认超时更改为数据库本身的属性;使用SQL Server Manager进行此操作。
请确保来自Web应用程序的查询与您直接运行的查询完全相同。使用分析器验证此内容。
httpRuntime
块并处理 executionTimeout
(以秒为单位)。<?xml version="1.0" encoding="utf-8" ?>
<configuration>
...
<system.web>
<httpRuntime executionTimeout="90" maxRequestLength="4096"
useFullyQualifiedRedirectUrl="false"
minFreeThreads="8"
minLocalRequestFreeThreads="4"
appRequestQueueLimit="100" />
</system.web>
...
</configuration>
更多信息请参见MSDN页面。
我认为你不能增加查询执行的时间,但你需要增加请求的超时时间。
执行超时指定了在 ASP.NET 自动关闭请求之前允许执行的最大秒数。(默认时间为 110 秒。)
详情请参考 https://msdn.microsoft.com/en-us/library/e1f13641%28v=vs.100%29.aspx
你可以在 web.config 中进行设置。例如:
<httpRuntime maxRequestLength="2097152" executionTimeout="600" />