解决SQL查询中的超时错误我得到这个错误:超时已过期。在操作完成之前超时期限已过或服务器未响应。我知道那里有指南可以帮助解决这个问题,但它们对我不起作用。我缺少什么或者我应该在我的C#程序中向这些SQL语句添加代码的位置:Stringsql=project1.Properties.Resources.myQueryData;SqlDataAdaptersqlClearQuestDefects=newSqlDataAdapter(sql,"DataSource=ab;InitialCatalog=ac;UserID=ad;Password=aa");DataSetlPlanViewData=newDataSet();sqlClearQuestDefects.Fill(lPlanViewData,"PlanViewData");我在这一行收到超时错误:SqlDataAdaptersqlClearQuestDefects=newSqlDataAdapter(sql,"DataSource=ab;InitialCatalog=ac;UserID=ad;Password=aa");SqlDataAdapteradp=newSqlDataAdapter();adp.SelectCommand.CommandTimeout=0;//在命令对象上设置超时您正在尝试连接到SQLServer,但它花费的时间比ADO.NET愿意等待的时间要长。尝试使用SQLServerManagementStudio使用相同的用户名和密码连接到同一台服务器。如果你得到同样的错误,你的连接字符串有问题,你指定的服务器没有运行,或者你无法从你所在的网络访问服务器(也许你正在尝试使用公共IP地址进入内部服务器名称)。我无法想象您会在SSMS中输入完全相同的服务器和凭据并连接,然后在ADO.NET中执行相同操作并失败的情况。如果您使用的是慢速网络,您可以尝试增加超时值。但是,如果连接发生,它应该会很快发生。查看服务器上的SQLNativeClient设置和SQLServer设置。有一个允许的协议部分;SQL可以使用各种协议进行连接。通常,您需要为网络上的服务器使用TCP/IP,为在您自己的计算机上运行的服务器使用命名管道。从您的评论中编辑:哦,这是正常的;一直在发生。在TCP网络上,数据包有时会在传输过程中“碰撞”或“丢失”。这是数据包交换技术的一个已知弱点,在大多数情况下由TCP协议本身管理。一种不容易检测到的情况是初始请求在shuffle中丢失连接。在这种情况下,服务器不知道有一个请求,客户端也不知道他们的请求没有收到。所以,客户所能做的就是放弃。为了让你的程序健壮,你所要做的就是预料到一两次失败,然后重试你的请求。这是一个基本算法:SqlDataAdaptersqlClearQuestDefects;短重试=0;while(true){try{sqlClearQuestDefects=newSqlDataAdapter(sql,"DataSource=ab;InitialCatalog=ac;UserID=ad;Password=aa");休息;}catch(Exception){重试++;//在放弃之前将总共尝试3次if(retries>2)throw;由于其他答案中没有提到增加连接超时的确切命令(还)——如果您确定需要增加连接超时,您应该在连接字符串中执行以下操作:DataSource=ab;InitialCatalog=ac;用户ID=ad;密码=aa;连接超时=120,其中120=120秒。我记得默认值是20或30。这可能是您的数据库的连接问题,例如,如果您有以下连接字符串:“DataSource=MyDatabaseServer...那么您需要确保:您还可以尝试连接到给定的数据库实例作为诊断步骤.有很多文章解决了SQLServer连接问题-谷歌搜索了出现或失败的特定错误消息,因为服务器故障最近遇到了这个问题并找到了一个对我有用的解决方案。顺便说一句,设置Timeout=0有助于避免异常,但执行时间不合理,而手动执行存储过程需要几秒钟。底线:我将SETIMPLICIT_TRANSACTIONSOFF添加到用于填充数据集的存储过程。来自MSDN:SQLServerTheSQLServerNativeClientOLEDBProvider和SQLServerNativeClientODBC驱动程序在连接时自动将IMPLICIT_TRANSACTIONS设置为OFF。对于与SQLClientManagedProvider的连接以及通过HTTP端点接收的SOAP请求,SETIMPLICIT_TRANSACTIONS默认为OFF。[…]SETIMPLICIT_TRANSACTIONS在SETANSI_DEFAULTS为ON时为ON.所以我认为在我的情况下不需要默认值。(我无法检查。在SQL服务器上没有足够的权限)。但是添加这一行GoingtomySP解决了这个问题。重要说明:在我的例子中,我不需要交易,所以取消隐式交易设置没有问题。如果在您的情况下必须进行交易,则您可能不应该使用此解决方案。以上就是C#学习教程的全部内容:解决SQL查询超时错误。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
