尝试连接数据库时出现以下错误:
在建立与 SQL Server 的连接时发生了一些与网络或实例特定的错误。找不到服务器或无法访问。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。(提供程序:Named Pipes Provider,错误:40 - 无法打开到 SQL Server 的连接)
有时我会遇到这个错误,有时则不会。例如:当我第一次运行程序时,它会成功地打开连接;但当我第二次运行程序时,就会出现此错误。接下来,如果我再次运行程序,那么错误就不会再出现。
当我尝试通过 SSMS 连接同一数据库服务器时,连接是成功的,但是只有在我的程序中才会遇到这个网络问题。
数据库不在我的LOCAL上。
我在使用本地数据库时没有遇到这个错误。
代码:
public class AddOperation
{
public void Start()
{
using (var processor = new MyProcessor())
{
for (int i = 0; i < 2; i++)
{
if(i==0)
{
var connection = new SqlConnection("Connection string 1");
processor.Process(connection);
}
else
{
var connection = new SqlConnection("Connection string 2");
processor.Process(connection);
}
}
}
}
}
public class MyProcessor : IDisposable
{
public void Process(DbConnection cn)
{
using (var cmd = cn.CreateCommand())
{
cmd.CommandText = "query";
cmd.CommandTimeout = 1800;
cn.Open();//Sometimes work sometimes dont
using (var reader = cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
//code
}
}
}
}
所以我对两件事感到困惑:
1)连接超时:我是否应该增加连接超时时间,这样会解决我的异常连接问题吗?
2)重试尝试策略:我是否应该像下面这样实现重试连接机制:
public static void OpenConnection(DbConnection cn, int maxAttempts = 1)
{
int attempts = 0;
while (true)
{
try
{
cn.Open();
return;
}
catch
{
attempts++;
if (attempts >= maxAttempts) throw;
}
}
}
我对这两个选项感到困惑。
能否有人建议我应该用什么更好的方式来处理这个问题?
powershell -Command echo ((new-object Net.Sockets.TcpClient).Client.Connect('yoursqlserver.database.windows.net', 1433)) 'success'
。 - Dan Guzman