SQL Server没有响应,超时已过期

时间:2018-07-20 16:39:46

标签: c# sql-server sql-server-2008-r2

我正在使用移动设备将行插入本地sqlserver。 有时候sql服务器没有响应,我被迫等待获取异常。

我已将sqlConnetion超时设置为3秒

 SqlConnection con = new SqlConnection("Data Source = " + MyIp + "; Initial Catalog = database; user id = sa; password = 1234;Connection Timeout=3");

问题是有时我需要等待30秒。 据我了解,这次是cmd执行超时。

con.Open();
SqlCommand cmd = new SqlCommand("Insert into customers(Name) values(name123)",con);
cmd.ExecuteNonQuery();
con.Close();

所以第一个问题是Sql连接超时不包括它们两个吗?

第二个问题,如果sql不响应,那么为什么我在3秒钟内没有得到第一个异常?

最后一个问题,为什么sql server有时无法通过网络响应? 移动设备和服务器之间的网络(流量)延迟会很大吗?

2 个答案:

答案 0 :(得分:1)

您在SqlConnection上定义的超时仅应用于连接。它不会影响任何命令。

您可以通过执行以下操作更改命令的超时时间

cmd.CommandTimeout = 30;

很遗憾,我不能为您解决最后一个问题。

答案 1 :(得分:0)

这里全部合而为一,可能有人会提供更多详细信息,但实际上,您设置的超时只是存在于不同层的许多超时设置之一。这些层中的一些位于SQL Server端,一些位于.Net框架端,而某些层则由用户设置,就像您在实际连接上一样。弄清楚哪些超时设置处于优先地位可能是一个挑战。

更重要的是,此操作为什么要花这么长时间。您提供的内容应该足够快,以至于所有这些都不会成为问题。它没有比您尝试做的要简单的,几乎应该是瞬时的。我可以向您保证,它不是SQL Server本身,除非您在该表中确实有数十亿条记录,并且每一列都已建立索引,即使如此,我仍然怀疑它的服务器是否将所有时间都花在了查询上,而这一定是在传输中。仅凭提供的信息,我们无法对它进行故障排除。