客户端数据库上的连接挂起应用程序



在我的应用程序上,我只需要连接客户端数据库(SqlServer),看看我们是否可以连接。这些是我在web.config中的连接字符串(值不是那样的,我已经更改了ip、user和pwd)

<add name="ConnectionStringLibracom" connectionString="Data Source=192.168.1.45SqlServer2008;Initial Catalog=xxx;user=xxx;pwd=xxx;Application Name=MES"
      providerName="System.Data.SqlClient" /> (MINE)
<add name="ConnectionStringMigplus" connectionString="Data Source=999.99.999.99;Initial Catalog=xxx;user=xxx;pwd=xxx"
          providerName="System.Data.SqlClient" /> (CLIENT)

但是这段代码挂起了我的整个应用程序(当我说它挂起时,我的意思是它不允许我的应用程序连接到我们的数据库)。我正在Default.aspx加载事件中执行它:

protected void Page_Load(object sender, EventArgs e)
{
    if (!TestaIntegracaoErpMigplus())
    {
        lblMensagemIntegracao.Visible = true;
        Session["Integracao"] = false;
    }
    else
        Session["Integracao"] = true;
}
protected static bool TestaIntegracaoErpMigplus()
{
    string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString;
    bool ret = false;
    using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
    {
        try
        {
            Conn.Open();
            if (Conn.State == ConnectionState.Open)
            {
                ret = true;
            }
        }
        catch (SqlException)
        {
            ret = false;
        }
    }
    return ret;
}

@编辑:问题不在于我是否可以连接到服务器,问题是:当我试图连接到数据库时,我的asp.net网站被其他页面上的新请求冻结

您不需要检查ConnectionState

如果无法打开连接,则抛出异常

也许这张支票导致了你的问题

protected static bool TestaIntegracaoErpMigplus()
{
    bool ret = true;    
    try
    {
        string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString; 
        using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
        {
            Conn.Open();
        }
    }
    catch (Exception)
    {
        ret = false;
    }
    return ret;
}

-------------更新------------------

尝试降低连接字符串中的连接超时:

<add name="ConnectionStringMigplus" connectionString="Data Source=999.99.999.99;Initial Catalog=xxx;user=xxx;pwd=xxx;Connection Timeout=5" providerName="System.Data.SqlClient" />

您可以尝试将连接移动到Task,并在超时时使用Wait功能,类似于

protected static bool TestaIntegracaoErpMigplus()
{
    string connectionStringMigplus = WebConfigurationManager.ConnectionStrings["ConnectionStringMigplus"].ConnectionString;
    var task = Task.Factory.StartNew<bool>(()=>{
        bool ret = true;
        using (SqlConnection Conn = new SqlConnection(connectionStringMigplus))
        {
            try
            {
                Conn.Open();
            }
            catch (SqlException)
            {
                ret = false;
            }
        }
        return ret;
    });
    if(task.Wait(/*your timeout in milliseconds*/)){
        return task.Result;
    }
    return false;
}

最新更新