ステップ1)サーバーにアクセスできることを確認します:(オフライン処理があるため)
public static bool dbOnline(string timeOut="3")
{
bool online = false;
try
{
var testConn = new SqlConnection(Utils.ConnectionStr(timeOut));
testConn.Open();
online = true;
testConn.Close();
}
catch (Exception)
{
online = false;
}
return online;
}
2)okが返されたら、dlinqインスタンスを作成します!
_DataContext = new DataContext(Utils.ConnectionStr);//System.Data.Linq.DataContext
//then i point out a customer in DB
var customer = _DataContext.Customers.TableQuery().FirstOrDefault(c => c.ID == custid);
//Check its not null
if (customer != null)
{
customer.points+= _points;
customer.LastUpdated = DateTime.Now;
customer.SubmitChanges();
}
3)そして時々私はこのエラーを受け取ります、これを防ぐために私ができることは何ですか、それともネットワークを修正することですか? (私はネットワークに問題があることを知っています)が、何か違うことをすることはできますか? -ありがとう
エラー:* System.Data.SqlClient.SqlException(0x80131904):タイムアウトの期限が切れました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。 *
The statement has been terminated.
at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection)
at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning()
at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj)
at System.Data.SqlClient.SqlDataReader.ConsumeMetaData()
at System.Data.SqlClient.SqlDataReader.get_MetaData()
at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString)
at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result)
at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method)
at System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior, String method)
at System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)
at System.Data.Common.DbCommand.ExecuteReader()
at System.Data.Linq.SqlClient.SqlProvider.Execute(Expression query, QueryInfo queryInfo, IObjectReaderFactory factory, Object[] parentArgs, Object[] userArgs, ICompiledSubQuery[] subQueries, Object lastResult)
at System.Data.Linq.SqlClient.SqlProvider.ExecuteAll(Expression query, QueryInfo[] queryInfos, IObjectReaderFactory factory, Object[] userArguments, ICompiledSubQuery[] subQueries)
at System.Data.Linq.SqlClient.SqlProvider.System.Data.Linq.Provider.IProvider.Execute(Expression query)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.DynamicUpdate(TrackedObject item)
at System.Data.Linq.ChangeDirector.StandardChangeDirector.Update(TrackedObject item)
at System.Data.Linq.ChangeProcessor.SubmitChanges(ConflictMode failureMode)
at System.Data.Linq.DataContext.SubmitChanges(ConflictMode failureMode)
タイムアウトを単独で特定することは不可能ですが、通常、 ネットワークエラーには別のエラーが発生すると予想されます。私が最初に見るもの:
私のお金は2番目になります
また、 TableQuery()
が何であるかがTableQuery()
ません。それがIEnumerable<Customer>
を返す場合、それは多すぎるデータのプルに関連している可能性があります(コンテキストでは、おそらく最小でIQueryable<Customer>
を返す必要がありますが、表示できません)。
ここで実際に行うことは、SQLトレースを実行し、それを実際の動作でキャッチすることです-何が起こっていたかを確認してください。