Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当另一台sql server关闭时,从可用的sql server检索数据_C#_Asp.net_Sql_Sql Server 2008 - Fatal编程技术网

C# 当另一台sql server关闭时,从可用的sql server检索数据

C# 当另一台sql server关闭时,从可用的sql server检索数据,c#,asp.net,sql,sql-server-2008,C#,Asp.net,Sql,Sql Server 2008,我正在使用c#在asp.net中制作一个项目,其中我使用了两台SQL Server。两台服务器具有相同的数据。如果一台服务器宕机,我希望我的应用程序从另一台服务器检索数据。asp.net中是否有任何方法可以用来测试服务器连接性或服务器可用性?提前谢谢 这是用代码实现的一种方法。 您不需要测试可用性(如果它说“是”,然后下降怎么办?) 您要做的是运行查询,如果查询失败,则检查错误类型,并在需要时对另一台服务器重复 你做了一个包装函数就完成了。我假设你使用的是实体框架 我在测试数据库连接时遇到了类似

我正在使用c#在asp.net中制作一个项目,其中我使用了两台SQL Server。两台服务器具有相同的数据。如果一台服务器宕机,我希望我的应用程序从另一台服务器检索数据。asp.net中是否有任何方法可以用来测试服务器连接性或服务器可用性?提前谢谢

这是用代码实现的一种方法。 您不需要测试可用性(如果它说“是”,然后下降怎么办?)

您要做的是运行查询,如果查询失败,则检查错误类型,并在需要时对另一台服务器重复


你做了一个包装函数就完成了。

我假设你使用的是实体框架

我在测试数据库连接时遇到了类似的问题。 我编写这个函数是为了验证连接字符串

public enum DBConnectionStatus
    {
        CONNECTION_ERROR,
        AUTHENTICATION_ERROR,
        INVALID_DATABASE,
        UNKNOWN_ERROR,
        OK,
    };


  public static DBConnectionStatus ValidateConnection(string ConnectionString)
    {
        DBConnectionStatus result = DBConnectionStatus.UNKNOWN_ERROR;
        DataContext DB = new DataContext(ConnectionString);
        try
        {
            DB.Connection.Open();
        }
        catch (SqlException ex)
        {
            switch (ex.Number)
            {
                case -1:
                case 2: //Cant reach data source (not accessable or offline)
                    result = DBConnectionStatus.CONNECTION_ERROR;
                    break;
                case 4060:
                    result = DBConnectionStatus.INVALID_DATABASE;
                    break;
                case 18452:
                case 18456: //Invalid Authentication
                    result = DBConnectionStatus.AUTHENTICATION_ERROR;
                    break;
                default: //All other errors
                    result = DBConnectionStatus.UNKNOWN_ERROR;
                    break;
            }
        }
        finally
        {
            if (DB.Connection.State == ConnectionState.Open)
            {
                DB.Connection.Close();
            }

        }
        return result;

    }

您可以测试与主数据库的连接,如果响应为connection_ERROR,则可以尝试使用第二个数据库

如果您试图在客户端实现故障切换,请使用。如果在SQL Server端实现集群,则不必在应用程序中构建所有故障切换逻辑。