6

我设置了一个数据库镜像,然后用它connectionstring来连接它:

    Data Source={0};Failover Partner={1};Initial Catalog=AdventureWorks;
    Integrated Security=True;

将一些数据添加到数据库后,我关闭了主体服务器,因此镜像服务器成为主体服务器。我再次打开连接,收到此错误:

    System.Data.SqlClient.SqlException: A transport-level error has 
occurred when sending the request to the server. (provider: Shared Memory 
Provider, error: 0 - No process is on the other end of the pipe.)

我认为通过在连接字符串中指定故障转移伙伴,ADO.NET 会为我完成这项工作。那我现在该怎么办?

4

4 回答 4

4

幸运的是,我解决了这个问题。我需要做的就是调用 ClearPool 方法:

SqlConnection.ClearPool(conn);

此方法将清除连接池。然后,问题就没有了。我很高兴。

谢谢大家,谢谢你们的支持。:D

于 2010-02-04T18:50:22.323 回答
2

我不是 .net 方面的专家,但您需要 SQL 本地客户端 (SQLNCLI) 来处理故障转移。“ado.net”可能是 SQLOLEDB

至少在 Windows Server 2003 之前它默认不安装。它要么是独立的,要么是 SQL 客户端工具的一部分,所以我怀疑你正在使用 SQLOLEDB

于 2010-02-04T16:05:03.820 回答
0

我们发现如果您没有设置足够大的超时设置,就会发生这种情况。

https://serverfault.com/questions/249589/db-auto-failover-in-c-does-not-work-when-the-principal-server-physically-goes-o

于 2012-04-12T15:57:37.100 回答
0

关闭主体后,您是否验证故障转移确实成为主体?如果 Sql Server 上没有自动故障转移,那么您的镜像仍然是镜像。

于 2010-02-04T16:32:58.987 回答