我需要在global.asax应用程序启动事件时在windows azure上创建一个sql数据库,但是我得到了这个错误:
Timeout expired. The timeout period elapsed prior to completion of the operation or the server is not responding. This failure occurred while attempting to connect to the routing destination. The duration spent while attempting to connect to the original server was - [Pre-Login] initialization=296; handshake=324; [Login] initialization=0; authentication=1; [Post-Login] complete=94;
我的代码如下:
private void SetupSSM() {
SqlConnectionStringBuilder connStrBldr = new SqlConnectionStringBuilder
{
UserID = SettingsHelper.AzureUsernamedb,
Password = SettingsHelper.AzurePasswordDb,
ApplicationName = SettingsHelper.AzureApplicationName,
DataSource = SettingsHelper.AzureSqlServer
};
bool created=DbUtils.CreateDatabaseIfNotExists(connStrBldr.ConnectionString, SettingsHelper.Azureshardmapmgrdb);
if(created)
{
Sharding sharding = new Sharding(SettingsHelper.AzureSqlServer, SettingsHelper.Azureshardmapmgrdb, connStrBldr.ConnectionString);
}
}
public static bool CreateDatabaseIfNotExists(string connectionString, string databaseName)
{
using (SqlConnection conn = new SqlConnection(connectionString))
{
conn.Open();
SqlCommand cmd = new SqlCommand(
string.Format("SELECT * FROM sys.databases WHERE [name]=\'{0:S}\'", databaseName),
conn);
if (cmd.ExecuteScalar() == null)
{
SqlCommand cmd2 = new SqlCommand(
string.Format("CREATE DATABASE [{0:S}];", databaseName),
conn);
cmd2.ExecuteNonQuery();
return true;
}
else
return false;
}
}
如何提高timeout>?是sql超时还是由于sql没有响应而导致web请求超时?
发布于 2015-07-15 07:39:24
您可以通过执行以下操作来设置命令超时,您看到的错误是命令超时,很可能create DB花费的时间超过了默认超时值30秒。
例如,将超时设置为300秒cmd.CommandTimeout = 300
发布于 2016-06-24 23:08:48
当我们遇到这个问题时,事实证明我们的数据库动力不足。性能监视器显示,在我们收到错误期间,DTU已达到最大容量。Azure SQL Database Operation Timeout
发布于 2021-10-19 10:31:53
除了@Satya_MSFTs解释之外,您还可以将命令超时添加到连接字符串中,如果您的驱动程序支持它的话。可能看起来像这样(在ADO.NET语法中):
_connectionString = "Server=tcp:myenv.database.windows.net,1433;Database=mydb;User ID=myuserid;Password=mypassword;Encrypt=true;Connection Timeout=120;Command Timeout=120;"
然后可以像这样在Microsoft.Data.SqlClient.SqlConnection
中使用它:
await using var conn = new SqlConnection(_connectionString);
就像其他人说的,你应该在走这条路之前试着调优你的数据库。(在OPs的情况下不是。如果是一次性设置操作,可以增加超时时间,然后再减少超时时间。
https://stackoverflow.com/questions/31412577
复制相似问题