我有一个View,我正试图用它来填充TableAdapter。在我的代码中,我第一次正确填充表适配器,过滤我的bindingsource并使用datarowviews循环遍历数据行并执行所需的更新(由存储过程完成)。现在问题是,在发生这些更新之后,我需要再次填充tableadapter以便它反映这些更改。有时我使用的View将没有结果,有时可能。我不能给出具体的例子,因为数据对工作敏感,但我会尝试创建一个简化的例子
_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。在操作完成之前已经过了超时时间,或者服务器没有响应。”
好的,你会注意到我填充了我的视图,然后在列号等于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将关闭它)。 ta.fill的运行速度与Toad大约相同,大约在19-20秒左右,并且在多次测试后没有出错。谢谢你的帮助
答案 0 :(得分:1)