我收到此错误:
超时已过期.操作完成之前经过的超时时间或服务器没有响应.
我知道已有指南帮助解决这个问题,但它们并不适合我.我错过了什么或者我应该在哪里将代码添加到我的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)
您正在尝试连接到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)
| 归档时间: |
|
| 查看次数: |
39430 次 |
| 最近记录: |