我有一个视图,我试图用它来填充TableAdapter。在我的代码中,我第一次正确地填充表适配器,过滤我的bindingsource并使用datarowviews循环遍历数据行并执行所需的更新(由存储过程完成)。现在的问题是,在这些更新发生后,我需要再次填写tableadapter,以便它反映这些变化。有时我正在使用的视图将没有结果,其他时候可能。我不能给出一个具体的例子,因为数据是工作敏感的,但我将尝试创建一个简化的例子
_taMyView.Fill(_dsMyConnection.MyView)
_bsMyView.Filter = "Number = 1"
For Each drvMyViewRow in _bsMyView
Do Stuff
'stored procedure that updates MyTable (what the view was created from)
Next
_taMyView.Fill(_dsMyConnection.MyView)
_bsMyView.Filter = "Number = 0"
这个错误就是"Timeout expired "。操作完成前的超时时间或服务器没有响应。"
好的,你会注意到我填充了我的视图,然后过滤了列Number等于1的结果。我循环遍历所有这些结果并更新创建视图的表。在退出循环后,我点击了第二个。fill,它在大约20秒后超时。经过测试,这个超时似乎只发生在MyView没有保存任何记录的时候。任何帮助都将非常感激。
一些额外的花絮。我使用Visual Studio 2010和sqlserver 2008。所有工作都是在VB.NET中完成的。此外,在调试期间,我在第二次填充时暂停,转到Toad for Data Analysts并运行SELECT * FROM MyView,该操作没有超时,并在大约19秒内返回空结果表。我还尝试在第二次填充之前对tableadapter进行处理,但它有类似的超时。抱歉,如果这个答案看起来很明显,我只是一个实习生,还在学习语言。
编辑
MyAdapter.Adapter.SelectCommand.CommandTimeout = 0
这似乎已经完成了技巧,从我的理解,让它运行,直到它完成(SQLServer将关闭它,如果连接保持开放的时间比它允许的更长)。助教。fill的速度和Toad差不多,大约在19-20秒左右,多次测试后没有出现错误。谢谢你的帮助
19秒?有几行?这个观点有多复杂?如果一个查询需要19秒从蟾蜍或管理工作室,这是非常可行的,它需要两倍,从你的VB。NET代码。也许您应该考虑增加CommandTimeout值(我相信默认值是30秒)和/或优化结构,如果您认为19秒太长(我当然这么认为)。