解决SQL查询的超时错误

Sam*_*Sam 9 c# sql timeout

我收到此错误:

超时已过期.操作完成之前经过的超时时间或服务器没有响应.

我知道已有指南帮助解决这个问题,但它们并不适合我.我错过了什么或者我应该在哪里将代码添加到我的C#程序中的这些SQL语句中:

String sql = project1.Properties.Resources.myQueryData;

SqlDataAdapter sqlClearQuestDefects = new SqlDataAdapter(sql,
    "Data Source=ab;Initial Catalog=ac;User ID=ad; Password =aa");

DataSet lPlanViewData = new DataSet();
sqlClearQuestDefects.Fill(lPlanViewData, "PlanViewData");
Run Code Online (Sandbox Code Playgroud)

我在这一行收到超时错误:

SqlDataAdapter sqlClearQuestDefects = new SqlDataAdapter(sql, 
    "Data Source=ab;Initial Catalog=ac;User ID=ad; Password =aa");
Run Code Online (Sandbox Code Playgroud)

Ami*_*gga 15

SqlDataAdapter adp = new SqlDataAdapter();
adp.SelectCommand.CommandTimeout = 0;  // Set the Time out on the Command Object
Run Code Online (Sandbox Code Playgroud)

  • 当代码尝试从命令对象填充数据时发生超时,因此我们必须设置命令超时属性. (3认同)

Kei*_*thS 5

您正在尝试连接到SQL Server,并且花费的时间比ADO.NET愿意等待的时间长.

尝试使用SQL Server Management Studio使用相同的用户名和密码连接到同一服务器.如果你得到同样的错误,你的连接字符串有问题,你指定的服务器没有运行,或者你不能从你所在的网络到服务器(也许你在公共IP上)尝试进入内部服务器名称的地址).我想不出你在SSMS中输入完全相同的服务器和凭据并连接的情况,然后在ADO.NET中执行相同操作并失败.

如果您使用的是慢速网络,则可以尝试增加超时值.但是,如果连接完全发生,它应该很快发生.

查看SQL Native Client设置和服务器上的SQL Server设置.有一个允许的协议部分; SQL可以使用各种协议进行连接.通常,您需要网络上服务器的TCP/IP,以及在您自己的计算机上运行的服务器的命名管道.

从你的评论编辑:哦,这是正常的; 一直都在发生.在TCP网络上,数据包不时会在传输中"冲突"或"丢失".这是分组交换技术的一个已知弱点,在大多数情况下由TCP协议本身管理.不容易检测到的一种情况是在混洗中丢失连接的初始请求.在这种情况下,服务器不知道有请求,并且客户端不知道他们的请求没有收到.所以,所有客户端都可以放弃.

为了使您的程序更加健壮,您所要做的就是期待一两次失败,只需重新尝试您的请求即可.这是一个基本算法:

SqlDataAdapter sqlClearQuestDefects;

short retries = 0;
while(true)
{
    try
    {
       sqlClearQuestDefects = new SqlDataAdapter(sql, "Data Source=ab;Initial Catalog=ac;User ID=ad; Password =aa");
         break;
    }
    catch(Exception)
    {
       retries++;
         //will try a total of three times before giving up
       if(retries >2) throw;    
    }
}
Run Code Online (Sandbox Code Playgroud)