tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板) [ツリー表示へ]   [Home]
一括表示(VB.NET VB2005)
タイトルSQLサーバーのタイムアウト
記事No6795
投稿日: 2008/01/11(Fri) 11:43
投稿者みっくん
みっくんです。 VBの初心者で奮闘中です。

VB2005からSQL Server2000のDBへアクセスしDatagridviewに表示しているのですが
約20万レコードのDBへSQL分で実行するとタイムアウトになってしまいます。
Access2000で同じことを行うと問題なく表示されるのですが、VB上で何か設定が
あるのでしょうか。

Cm.ComandText = "SELECT TOP 500 * FROM table ORDER BY item1" を実行しています。

Cm.ComandText = "SELECT TOP 500 * FROM table "はちゃんと問題なく動作します。

Access2000で出来て、VB2005でタイムアウトになってしまうことにがっかりしています。
Access2000と同じように待てる設定て何かありますか。

エラーは「タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、
またはサーバーが応答していません。」と表示されます。

よろしくお願いします。

[ツリー表示へ]
タイトルRe: SQLサーバーのタイムアウト
記事No6801
投稿日: 2008/01/11(Fri) 15:24
投稿者YuO
> VB2005からSQL Server2000のDBへアクセスしDatagridviewに表示しているのですが
> 約20万レコードのDBへSQL分で実行するとタイムアウトになってしまいます。
> Access2000で同じことを行うと問題なく表示されるのですが、VB上で何か設定が
> あるのでしょうか。

ConnectionStringで指定したConnectionTimeoutの値はどうなっていますか。
指定しなかった場合,15秒でタイムアウトします。

http://msdn2.microsoft.com/ja-jp/library/system.data.sqlclient.sqlconnection.connectionstring.aspx

[ツリー表示へ]
タイトルRe^2: SQLサーバーのタイムアウト
記事No6805
投稿日: 2008/01/11(Fri) 16:43
投稿者みっくん
YuOさん

早速のアドバイス、ありがとうございます。

ConnectionStringでConnectionTimeoutは特に指定はしていませんでしたので
追記し、30にしてみましたが変わりません。

あと、教えていただいたMSDNを参考にConnectionStringを書き換えてみましたが
動作は変わりません。このようにしています。
Cn = New SqlConnection("Data Source=sql2000;Initial Catalog=TEST_DB;Persist
Security Info=True;Connection Timeout=30;Type System Version=SQL Server 2000;User
ID=mikkun;Password=MichiMichi;")

質問ですが、ConnectionTimeoutって接続時のタイムアウトまでの時間ではないのでしょうか。
接続はうまくいっているようです。

よろしくお願い致します。

[ツリー表示へ]
タイトルRe: SQLサーバーのタイムアウト
記事No6809
投稿日: 2008/01/11(Fri) 18:22
投稿者魔界の仮面弁士
> Cm.ComandText = "SELECT TOP 500 * FROM table ORDER BY item1" を実行しています。
> Cm.ComandText = "SELECT TOP 500 * FROM table "はちゃんと問題なく動作します。
item1 にインデックスを貼ってみては如何でしょう。

> VB2005でタイムアウトになってしまうことにがっかりしています。
System.Data.SqlClient.SqlCommand.CommandTimeout を設定してみては如何でしょう。

あと、タイムアウト絡みの話について。
http://blogs.wankuma.com/mrt/archive/2007/10/26/104320.aspx

[ツリー表示へ]
タイトルRe^2: SQLサーバーのタイムアウト
記事No6812
投稿日: 2008/01/11(Fri) 19:36
投稿者みっくん
魔界の仮面弁士さん

いつもありがとうございます。

本来はDBのitem1へインデックスを設定するのが良いのでしょうが、
色々と制約があるので設定出来ません。

SqlCommand.CommandTimeoutを設定して動作するようになりました。

しかし、Access2000のODBCでアクセスした時よりも遅いような気がします。

本当にありがとうございました。

[ツリー表示へ]
タイトルRe^2: SQLサーバーのタイムアウト
記事No6813
投稿日: 2008/01/11(Fri) 19:36
投稿者みっくん
魔界の仮面弁士さん

いつもありがとうございます。

本来はDBのitem1へインデックスを設定するのが良いのでしょうが、
色々と制約があるので設定出来ません。

SqlCommand.CommandTimeoutを設定して動作するようになりました。

しかし、Access2000のODBCでアクセスした時よりも遅いような気がします。

本当にありがとうございました。

[ツリー表示へ]