問題解決:SqlServerとC#の連携でのタイムアウトエラー

このQ&Aのポイント
  • C#+SqlServerでC/Sアプリを作成し、大容量のデータを保存する際にタイムアウトエラーが発生しています。
  • 問題はデータ保存中に発生し、下記のエラーメッセージが表示されます:「タイムアウトに達しました。操作が完了する前にタイムアウト期間が過ぎたか、またはサーバーが応答していません。」
  • このエラーはデータ量が多い場合に発生し、データの保存が完了する前にタイムアウト期間が経過したためです。
回答を見る
  • ベストアンサー

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

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

  • ベストアンサー
回答No.1

8GB の何をどういう風に送っているのかまったく書かないのですね。 Command オブジェクトを使用しているのならタイムアウト値を無制限にするとか。

get_star
質問者

お礼

ありがとうございました。 接続文字列のTimeOutとCommandTimeoutの時間を延ばすことで解決しました。 connectionString="Data Source=sdfsdfsdf;Initial Catalog=AERIS_ONLINE;Persist Security Info=True;Connection Timeout=3600;" dc.CommandTimeout = 3600;

関連するQ&A

  • タイムアウト

    SQLServer2008Exを使用してます。 MSSMSでクエリ(SELECT文)を実行するとタイムアウトになってしまします。 データの量はそれなりにあるのですが、実行タイムアウトは0(ゼロ)無限の待ち時間に設定してあるのに何故なんでしょうか?

  • C#でのSQLへのアクセスについて

    SQL Serverのテーブルをコンソール上に表示する為のコードを書いたのですが SqlConnection SqlCommand SqlDataReader に対してエラーが出しまい、修正方法が分からず、どなたか教えて頂けないでしょうか? 【ソースコード】 using System; using System.Configuration; using System.Data; using System.Data.SqlClient; using Microsoft.Data.SqlClient; static void Main(string[] args) { string connectionString = "Data Source=○○;Initial Catalog=○○;User ID=○○;Password=○○;"; using (SqlConnection connection = new SqlConnection(connectionString)) { connection.Open(); using (SqlCommand command = new SqlCommand("SELECT * FROM [○○]", connection)) using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { Console.WriteLine(reader["column1"]); Console.WriteLine(reader["column2"]); } } } }

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

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

  • C# SQLServer 接続

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

  • 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) ・ ・ ・ となり、データベースの登録に失敗しましたとなります。 初歩的なことでもうしわけないのですが、よろしくお願いします。

  • 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

  • SQLSERVERの接続方法を教えて下さい

    Visual Studio C# Windows CE環境でSQLSERVERに接続する方法を教えて頂きたいです。 System.Data.SqlClient.SqlConnection cSqlConnection = new System.Data.SqlClient.SqlConnection("接続文字列"); cSqlConnection.Open(); とすると実行時にエラーになります。

  • SELECT文でタイムアウトが起こります。

    いつも勉強させて頂いております。どうぞよろしくお願いします。 以下の環境で開発を行っています。 SQLServer2005 ASP.NET C# .NETのソースで 1つのクラスに2つのクエリ(2つともSELECT←複数テーブルを結合している)を呼び出す処理を書いています。(トランザクション処理は付けていません)2クエリとも検索対象テーブルは60万件程度のデータを保持しています。検索条件によって処理速度は違うのですが、1ユーザが最も遅い検索条件で検索をしてもタイムアウトにはなりません。しかし、2ユーザが同じタイミングで検索(どのような条件でも)処理を行うと、タイムアウトを起こしてしまいます。まれにデッドロックも起こります。 SQLServerではSelectのたびにlockがかかるのでSQL文中に「WITH(NOLOCK)」を記述するように書かれているサイトを見つけたのですが、他ユーザからの更新もあり得るテーブルなので、他の方法を探しております。 トランザクション分離レベルは規定値です。 是非、どなたかご教授ください。よろしくお願いします。

  • PostgreSQLのタイムアウトについて

    VB.NETとPostgreSQLで社内システムを作っています。 更新クエリを実行すると15秒くらいでタイムアウトしてしまいます。 (エラーコードはメモを持ち帰るのを忘れたため覚えておりません…が、割と急いでいるので質問させて頂いてます) Statement_Timeoutはいじっておらず、値は0のままです。 プロバイダはnpgsqlです。 タイムアウトしないようにするにはどうすればいいでしょうか。 アドバイスお願いいたします。

  • VBタイムアウト

    タイムアウト、プールサイズの制限値 VB2010で業務アプリケーションの集計ツールを作成しています。 仕組みは単純で、下記の様にDateTimePicker(カレンダー)から日付を選び ボタンクリックでフォーム内のデータグリッド内に集計値が入っていく仕組みです。 'カレンダー日付選択 Sub Aggregate() '日付の取得 DateTimePicker1.Format = DateTimePickerFormat.Custom DateTimePicker1.CustomFormat = "yyyy-MM-dd 1つのフォームにデータグリッドが10個ほどあるので画面遷移までに5秒くらいかかってしまいます。 1度目の表示は問題ないのですが、日付を選択し直し2度、3度と実行すると ”タイムアウトに達しました。プールから接続を制限する前にタイムアウト期間が過ぎました。 プールされた接続がすべて使用中で、プールサイズの制限値に達した可能性があります。” と表示されてしまいます。開放も行っているつもりで原因がわかりません。 原因がわかれば教えていただきたいです。処理をスピードアップできる方法があればそれもお願いします。 接続文字は以下の通りです。 Function CONNECT(ByVal SqlText As String) As String Dim St As String Dim Cn As New System.Data.SqlClient.SqlConnection Dim SQL As New System.Data.SqlClient.SqlCommand Dim ServerName As String = "AAAAAAAAA" Dim UserID As String = "BBBBBBBBB" Dim Password As String = "CCCCCCC" Dim DatabaseName As String = "DB" Dim Adapter As New System.Data.SqlClient.SqlDataAdapter Dim Table As New DataTable Adapter.SelectCommand = SQL SQL.Connection = Cn SQL.CommandTimeout = 120 St = "Server=" & ServerName & ";" St &= "User ID=" & UserID & ";" St &= "Password=" & Password & ";" St &= "Initial Catalog=" & DatabaseName Cn.ConnectionString = St SQL.CommandText = SqlText Cn.Open() Return SQL.ExecuteScalar SQL.Connection = Nothing SQL.Transaction = Nothing SQL.Dispose() Cn = Nothing Cn.Dispose() Cn.Close() End Function データグリッドの転記は下記の様なコードをずらっと書いています。 DataGridView10(2, 3).Value = CONNECT("SELECT COUNT(*)" & _ " FROM dbo.IOTBL, dbo.APLTBL" & _ " WHERE APLTBL.APLID=IOTBL.APLID" & _ " And (APLTBL.APLTYPE='JA01')" & _ " And (APLTBL.DELETED<>'1')" )