• ベストアンサー

SQLがどの処理かをC#側で判断することは可能?

C# & SQLServerでプログラムを書いていますが、 ***************************************** System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 ***************************************** というエラーが発生します。 恐らく他の処理がアクセス中だと思うのですが、 そのアクセスがどの処理かをC#側で判断することはできるのでしょうか?

  • ENTRE
  • お礼率0% (16/2523)

質問者が選んだベストアンサー

  • ベストアンサー
  • imagear
  • ベストアンサー率66% (2/3)
回答No.1

エラー内容は必ずしも、一致している訳ではありません。 特に上記のようなエラー内容は、場合によってSQL文もしくは接続する文に間違いがあることで出るケースもあります。 ※参考URLのように「System.Data.SqlClient.SqlException」で調べて見てみると分かるかと思います。 Exceptionを見るか、ブレークポイントを置いてどこで落ちているか見るのが、一番早いかと思われます。 また、質問する際にはロジックを載せて下さるとこちらとしても分かりやすいです。

参考URL:
http://forums.microsoft.com/MSDN-JA/ShowPost.aspx?PostID=601758&SiteID=7

関連するQ&A

  • SqlServerとC#の連携問題 タイムアウト

    C#+SqlServerでC/Sアプリを作りました。 しかし、現在下記の問題があります。 ご存知の方いらっしゃいましたら、教えてください。 クライアント側はデータをサーバー側に送信します。 サーバー側はデータを受信しながらSqlServerに保存します。 軽量のデータでやるなら、問題は出ません。 しかし、8GBのデータでやると、その途中、いつも下記のエラーが出ます。 Class:11 Index #0 Message: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 LineNumber: 0 Source: .Net SqlClient Data Provider Procedure: System.Data.SqlClient.SqlException: タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。 場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) 場所 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 場所 System.Data.SqlClient.TdsParserStateObject.ReadSniError(TdsParserStateObject stateObj, UInt32 error) 場所 System.Data.SqlClient.TdsParserStateObject.ReadSni(DbAsyncResult asyncResult, TdsParserStateObject stateObj) 場所 System.Data.SqlClient.TdsParserStateObject.ReadNetworkPacket() 場所 System.Data.SqlClient.TdsParserStateObject.ReadBuffer() 場所 System.Data.SqlClient.TdsParserStateObject.ReadByte() 場所 System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) 場所 System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) 場所 System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) 場所 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) 場所 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) 場所 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 場所 System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult) 場所 System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries) 場所 System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query) 場所 System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicInsert(TrackedObject item) 場所 System.Data.Linq.ChangeDirector.StandardChangeDirector.Insert(TrackedObject item) 場所 System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode) 場所 System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode) 場所 System.Data.Linq.DataContext.SubmitChanges() その他:  SqlServer2008 R2  C# .Net3.5 WindowsServer2008 R2

  • サーバ側の処理は多すぎないのか?

    ◆多くのイベントを取りすぎてしまったら待ちが発生したりしないのでしょうか? (runat=server、with event と記載して、多くのイベントをハンドルしているとき) ◆例 ⇒ グリッドコントロールの内の各コントロールのフォーカスアウトとかのイベントを取るなど。 通信の回数も多くなるでしょうし、些細な操作でrequestに対するresponse を待っていたら、 待ちが発生するのでは?と思っていました。 しかし、フォーカスアウトとまではいかないまでも、結構たくさんのイベントを取っているシステムを見かけることも多いです。 (通信速度は、私が思っているよりも全然早いものなのでしょうか?意識する必要がない?でも通信の調子が悪いときだってありますよね?) ◆サーバー側に負担は掛けないようにした方が良い? JQueryで処理できることは、極力JQueryで処理した方が良いのでしょうか? みなさんはどう判断していますか?

  • SQL Serverへの接続

    下記の環境で開発をすることになりました。 開発言語:Borland C++Builder Professional Ver 5.0 データベース:Microsoft SQL Server2005 SQL Serverの文献を購入したところ、SQL Server2005へ通信するアプリケーションの作成には「.NET Framework Data Provider for SQL Server (SqlClient)」が推奨と書いてあり、「System.Data.SqlClient名前空間を参照することにより一連のクラスを利用できます。」とあります。 そこで、色々調べたのですが、どうしても Borland C++ で System.Data.SqlClient名前空間を参照する方法がわかりません。 参考ソース、参考サイト、参考文献なんでもいいのでご存知の方がいましたら教えて下さい。 (VB.Net、C# などは色々なサイトがあったのですが・・・)

  • C#~SQL2005で勝手にタイムアウト

    C#とSQL Server2005との連携でConnectionStringに connection timeout=60 を設定していますが、 30秒程度でタイムアウトしてしまいます。 タイムアウトの設定はソースコード上以外に、 SQL Server上でも設定が必要なのでしょうか?

  • ODBCタイムアウトエラー

    WindowsXP環境でACCESS2003を使用して、ODBCリンクでSQL SERVER2005に接続し、データーを取得後ローカルテーブルにデーターを置く処理を作って運用していたのですが、 Windows7でACCESS2003に移行し、システム内容は変更していないのですが Windows7になってリンクテーブルを開くと「ODBC タイムアウトエラー」が発生します。 WindowsXPのときはタイムアウトが出ずに1分くらいで結果が返ってきます。 多分、SQL SERVER ドライバーの影響と思うのですが分かりません。 どなたか教えてください。 Windows7 SQLSERVER(ODBC)ドライバー バージョン:6.01.7601.17514 windowsXP ドライバー バージョン:200.85.1132.00

  • 長時間処理のタイムアウトの問題

    VS2005 ASP.NET SQL Server こんにちは。 現在、あるページをアクセスした時の ページロードの時に呼ばれる関数で、 DBの内容の変更を行っています. ただ、この処理が少し重い処理で、 処理中にタイムアウトしてしまい 処理が途中で止まってしまいます. この処理をサーバーの設定を変えずに解決する方法はないでしょうか? 処理だけをサーバー上に残してページを表示したり、 意図的にタイムアウトをさせないように動作させることなど なんでも構いません. お力添えをお願い致します.

  • C# SQLServer 接続

    WCF RIA サービスを使用して C#からSQLServerに接続(データ取得など) する方法を教えて下さい。 それとも出来ないのでしょうか? 変なことを言っている質問なら そうと言って下さると助かります。 using System.Data.SqlClient;を 使用しないでの接続する方法を求めています。 それとも上記を使用しないと接続など 出来ないのでしょうか?

  • PATH を返してくれるような SQL 文の書き方について

    DBサーバ+APサーバの構成です。 APサーバで動くプログラムより SQL 文を発行して、 SQLServer2005 のデータを取得できる環境にあります。 やりたいことは、BACKUP DATABASE 文を、APサーバのプログラム から発行し、DBサーバ上にバックアップデータを保存することです。 DBサーバのフォルダ構成が環境によってまちまちなので、 SQL文を投げて、DBサーバのフォルダを取得したいのですが、 SQLServer のシステムテーブルなどに格納されていたりは しないでしょうか。 表領域のフルパス名、SQLServer インストールフォルダなどを 取得できる方法があれば教えてください。 宜しくお願いします。

  • MS SQL Server 2005 express データベースに登録する際のエラー

    本についていた サンプルを動かそうとしてSQL server 2005 expressをインストールしたのですがサンプルデータベースに登録する際にDBエラーになって、うまくSQLServer 2005 Expressに接続できません。 エラーの内容は System.Data.SqlClient.SqlException:サーバーへの接続を確立しているときにエラーが発生しました。SQL Server 2005 に接続しているときときにこのエラーが発生した場合は、SQL Serverの既定の設定がリモート接続を許可しないようになっていることがエラーの原因である可能性があります。 (provider: 名前付きパイプ プロバイダ, error: 40 - SQL Server への接続を開けませんでした) 場所 System.Data.SqlClient.SqlInternalConnection.OnError(SqlExceptionexception, Boolean breakConnection) 場所System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj) 場所 System.Data.SqlClient.TdsParser.Connect(Boolean& useFailoverPartner, Boolean& failoverDemandDone, String host, String failoverPartner, String protocol, SqlInternalConnectionTds connHandler, Int64 timerExpire, Boolean encrypt, Boolean trustServerCert, Boolean integratedSecurity, SqlConnection owningObject, Boolean aliasLookup) 場所 System.Data.SqlClient.SqlInternalConnectionTds.OpenLoginEnlist(SqlConnection owningObject, SqlConnectionString connectionOptions, String newPassword, Boolean redirectedUserInstance) 場所 System.Data.SqlClient.SqlInternalConnectionTds..ctor(DbConnectionPoolIdentity > identity, SqlConnectionString connectionOptions, Object providerInfo, String newPassword, SqlConnection owningObject, Boolean redirectedUserInstance) 場所 System.Data.SqlClient.SqlConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningConnection) 場所 System.Data.ProviderBase.DbConnectionFactory.CreatePooledConnection(DbConnection owningConnection, DbConnectionPool pool, DbConnectionOptions options) 場所 System.Data.ProviderBase.DbConnectionPool.CreateObject(DbConnection owningObject) 場所 System.Data.ProviderBase.DbConnectionPool.UserCreateRequest(DbConnection owningObject) 場所 System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject) 場所 System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection) 場所 System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory) 場所 System.Data.SqlClient.SqlConnection.Open() 場所 Seasar.Framework.Util.DataSourceUtil.GetConnection(IDataSource dataSource) ・ ・ ・ となり、データベースの登録に失敗しましたとなります。 初歩的なことでもうしわけないのですが、よろしくお願いします。

  • C#で異なる環境のテーブル名をSQL上で指定したい

    お世話になります。 SQLSERVERとOracle上で共通して持っているIDを基にOracleのテーブルに保持している データをSQLSEVERで取得したいと思っています。 (1)SQLSERVERのテーブルA ID NAME ------------------ 111 NULL 222 NULL 333 NULL (2)OracleのテーブルB ID NAME ------------------ 111 情報1 222 情報2 333 情報3 444 情報4 (1)に存在しているIDでそのIDに紐づくNAMEを(2)より取得したいと思ってます。…(3) (3)SQLSERVERのテーブルC ※(1)とインスタンス・データベース名は同じ ID NAME ------------------ 111 情報1 222 情報2 333 情報3 上記の処理をC#で実現しようとした時に --------------------------------------------------------------------------------- // 接続文字列を生成する string stConnectionString = string.Empty; stConnectionString += "Data Source = local;"; stConnectionString += "Initial Catalog = master;"; stConnectionString += "Integrated Security = SSPI;"; stConnectionString += "MultipleActiveResultSets=true"; // SqlConnection の新しいインスタンスを生成する (接続文字列を指定) System.Data.SqlClient.SqlConnection cSqlConnection = ( new System.Data.SqlClient.SqlConnection(stConnectionString) ); // データベース接続を開く cSqlConnection.Open(); // cSqlConnection から SqlCommand のインスタンスを生成する System.Data.SqlClient.SqlCommand hCommand = cSqlConnection.CreateCommand(); System.Data.SqlClient.SqlCommand aCommand = cSqlConnection.CreateCommand(); // 実行する SQL コマンドを設定する hCommand.CommandText = "SELECT ID FROM テーブルA "; // 指定した SQL コマンドを実行して SqlDataReader を構築する System.Data.SqlClient.SqlDataReader hReader = hCommand.ExecuteReader(); // hCommand を破棄する (正しくは オブジェクトの破棄を保証する を参照) hCommand.Dispose(); while (hReader.Read()) { aCommand.CommandText = "insert into テーブルC select * from テーブルB where id = " + "'" + hReader["ID"].ToString() + "'"; int iResult = aCommand.ExecuteNonQuery(); MessageBox.Show(iResult + "行返しました"); } //aCommandを破棄する。 aCommand.Dispose(); //hReaderを閉じる hReader.Close(); cSqlConnection.Close(); cSqlConnection.Dispose(); --------------------------------------------------------------------------------- で実現したいと思っていますが、INSERT INTO ~SELECT文で指定しているテーブルBはOracle上にあるため、以下のようにOarcleへのコネクションを張る必要があると考えています。 //Oracleの接続情報(Oracle.DataAccess.dll・using Oracle.DataAccess.Client;を事前に追加) OracleConnection conn = new OracleConnection(); conn.ConnectionString = "User Id=scott;Password=tiger;Data Source=orcl;"; OracleCommand cmd = conn.CreateCommand(); conn.Open(); ~ ここで質問ですが、上記のOracleへのコネクションを張った場合、 C#内で指定しているテーブルBをどのように記述すれば(3)の処理結果を実現できるでしょうか? ご教授よろしくお願い致します。