0

私のアプリケーションはasp.netMVC3で、SQLExpress2012を使用しています。次のエラーが発生します

タイムアウトが期限切れになりました。操作が完了する前にタイムアウト期間が経過したか、サーバーが応答していません。

次を実行しようとすると:

public static List<vw_MasterView> GetMasterView(DateTime? fromDate, DateTime? toDate)
{
    if (fromDate == null) fromDate = new DateTime(1900, 1, 1);
    if (toDate == null) toDate = DateTime.Now;
    using (DALDataContext ctx = new DALDataContext())
    {
        var q = from c in ctx.vw_MasterViews
                where c.FirstVisitDate >= fromDate && c.LastVisitDate <= toDate
                select c;
        return q.ToList();
    }
} 

接続時間(サーバー/アドバンスプロパティ)を6000に増やしました。

デザイナからビューを実行すると(SQL Serverで)同じエラーメッセージが表示されますが、クエリを実行すると(SQL Serverで)正常に動作し、実行に54秒かかりました。

よろしくお願いします。

4

2 に答える 2

0

DBContext の接続タイムアウトを設定する必要がある場合があります。

ctx.CommandTimeout = 200;
于 2013-01-17T07:38:25.033 に答える
-1

DataContextクラスのデフォルト値はCommandTimeout30 秒に設定されています。完了までに 30 秒以上かかるデータベース クエリ (そして、あなたが書いたように約 60 秒かかる) は、System.Data.SqlClient.SqlException: Timeout expired Exceptionをスローします。

自動生成されたDALDataContextサブクラスを見ると、部分的なメソッド宣言がいくつかあります。関心のあるポイントはOnCreatedメソッドです。OnCreated自動生成されたクラスと同じ完全な名前を持つ別の部分クラスでメソッドの本体を定義し、次の方法で目的のタイムアウト値をそこに設定できます。

partial class DALDataContext : System.Data.Linq.DataContext
{
    partial void OnCreated()
    {
        this.CommandTimeout = 100;
    }
}
于 2013-01-17T07:38:54.570 に答える