C# SQL Server:“;“创建数据库”;查询超时
我有一个.Net应用程序正在创建一个新的数据库。当前的代码在开发环境和许多生产环境中运行良好。所以我相信代码是好的 但是,我们有一个特定实例,在该实例中,当应用程序运行以下SQL命令时,用户将获得超时:C# SQL Server:“;“创建数据库”;查询超时,c#,.net,sql-server,timeout,C#,.net,Sql Server,Timeout,我有一个.Net应用程序正在创建一个新的数据库。当前的代码在开发环境和许多生产环境中运行良好。所以我相信代码是好的 但是,我们有一个特定实例,在该实例中,当应用程序运行以下SQL命令时,用户将获得超时: CREATE DATABASE NameOfDatabase 代码非常简单,正如您所见,它使用SQL命令的默认超时时间为30秒: using (SqlConnection connection = new SqlConnection(connectionString)) { strin
CREATE DATABASE NameOfDatabase
代码非常简单,正如您所见,它使用SQL命令的默认超时时间为30秒:
using (SqlConnection connection = new SqlConnection(connectionString))
{
string query = "CREATE DATABASE " + databaseName;
SqlCommand command = new SqlCommand(query, connection);
connection.Open();
command.ExecuteNonQuery();
}
注意:我们的日志文件显示错误发生在ExecuteNonQuery
上,这表明这不是打开连接时超时,而是在查询执行期间超时
特定的.Net错误是:
超时已过期。操作完成前已过超时时间,或者服务器没有响应
使用堆栈跟踪中的一行来显示我关于它是命令超时(而不是连接超时)的推理:
位于System.Data.SqlClient.SqlCommand.ExecuteOnQuery()处
注意:此错误信息是通过对代码进行try/catch获得的,为了简单起见,该代码被排除在问题之外,因为它与问题无关
问题
创建数据库
查询是否需要这么长时间才能运行,并且仍然成功我没有足够的代表点发表评论。获取特定的错误包装命令。ExecuteOnQuery();在一次尝试中。至少您可以获得正在发生的特定错误。还可以使用将处理该对象的with SqlCommand
也许这篇TechNet文章能有所帮助 我没有足够的代表点发表评论。获取特定的错误包装命令。ExecuteOnQuery();在一次尝试中。至少您可以获得正在发生的特定错误。还可以使用将处理该对象的with SqlCommand
也许这篇TechNet文章能有所帮助 创建数据库需要立即写入磁盘。。。可能存在问题,请确保该服务器上的权限正确。@chuck用户非常确定权限是正确的,但我可以要求再次检查。但是,这会导致超时吗?如果这是导致超时的原因,我们是否会得到关于访问或身份验证的更具描述性的错误?最好的方法是检查SQL日志,看看到底发生了什么。也许你正在通过认证,而服务器没有启用混合模式?@musefan,祝你好运。我确实认为是服务器/配置。您还可以看到SSMS中发生了什么,如果创建SSMS需要31秒,那将非常有趣!创建数据库需要立即写入磁盘。。。可能存在问题,请确保该服务器上的权限正确。@chuck用户非常确定权限是正确的,但我可以要求再次检查。但是,这会导致超时吗?如果这是导致超时的原因,我们是否会得到关于访问或身份验证的更具描述性的错误?最好的方法是检查SQL日志,看看到底发生了什么。也许你正在通过认证,而服务器没有启用混合模式?@musefan,祝你好运。我确实认为是服务器/配置。您还可以看到SSMS中发生了什么,如果创建SSMS需要31秒,那将非常有趣!我已经有了具体的错误。这是个问题。关于使用block的观点很正确,但它与这个问题无关,所以让我们试着继续讨论这个问题。我只经历过一次,而调试程序给我的错误与捕获捕获到它时不同。这就是为什么我建议用try-catch包装。报告的错误可能更精确。我发布的错误消息来自try/catch。还值得注意的是,我无法更改代码以调试此问题您可以检查连接是否已打开吗?connection.open不会返回任何内容,但您可以检查状态吗?如果连接未打开,ExecuteOnQuery将超时。您建议“特定实例”可能是用户权限问题?非常确定连接。如果不成功,open()将抛出错误。我已经有了特定错误。这是个问题。关于使用block的观点很正确,但它与这个问题无关,所以让我们试着继续讨论这个问题。我只经历过一次,而调试程序给我的错误与捕获捕获到它时不同。这就是为什么我建议用try-catch包装。报告的错误可能更精确。我发布的错误消息来自try/catch。还值得注意的是,我无法更改代码以调试此问题您可以检查连接是否已打开吗?connection.open不会返回任何内容,但您可以检查状态吗?如果连接未打开,ExecuteOnQuery将超时。您建议“特定实例”可能是用户权限问题?非常确定连接。如果不成功,open()将抛出错误
using (SqlConnection connection = new SqlConnection(connectionString))
{
string query = "CREATE DATABASE " + databaseName;
using(SqlCommand command = new SqlCommand(query, connection))
{
try
{
connection.Open();
if (connection.State == ConnectionState.Open)
command.ExecuteNonQuery();
}
catch(Exception ex)
{
System.Diagnostics.Debug.WriteLine(ex.Message);
}
}
}