4

我需要在 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;
            }
        }

如何增加超时时间>?由于 sql 没有响应,是 sql 超时还是 Web 请求超时?

4

3 回答 3

7

您可以通过执行以下操作设置命令超时,您看到的错误是命令超时,很可能您的创建数据库花费的时间超过 30 秒,这是默认的超时值。

例如,将超时设置为 300 秒 cmd.CommandTimeout = 300

https://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.commandtimeout(v=vs.110).aspx

于 2015-07-14T23:39:23.997 回答
4

当我们遇到这个问题时,事实证明我们的数据库功能不足。性能监视器显示,在我们遇到错误期间,DTU 已达到极限。 Azure SQL 数据库操作超时

于 2016-06-24T15:08:47.827 回答
0

作为@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 的情况下。如果它是一次性设置操作,可以增加超时时间,然后在 imo 之后减少它)

于 2021-10-19T10:31:52.643 回答