2012-01-05 3 views
1

アプリケーションの接続に使用するXSDファイルがあります。私は別のCSファイルでクエリにアクセスするテーブルアダプタとメソッドを持っています。私はタイムアウト制限を増やしたい。私はライン上のnull参照は、私は、エラーを見ていると私は私の問題を引き起こしているものに混乱しています= 60タイムアウトを設定取得しかしテーブルアダプタのコマンドタイムアウトを設定する

[System.ComponentModel.DataObjectMethodAttribute 
(System.ComponentModel.DataObjectMethodType.Select, false)] 
    public Scout.ScoutDataTable GetItems(string node, int rank1, int rank2) 
    { 
     ScoutTableAdapter Adapter = new ScoutTableAdapter(); 
     Adapter.Adapter.SelectCommand.CommandTimeout = 60; 
     return Adapter.GetDataBy(node, rank1, rank2); 
    } 

:私はそのポイントの種類この他の解決策を見てきました。

+0

がSelectCommandプロパティはnullです上記のクラスに設定しています? –

+0

@KevRitchieおそらく私の問題だと思います。 –

+0

こんにちは@ジョー、あなたはこれを修正するために管理できましたか? –

答えて

2

これはアイデアがあまりにもすべてのコマンドのタイムアウトを増加させる継承テーブルアダプタの基本クラスを作成することです後半の答えの少しかもしれないが

を同じ問題を持つ人を助けるそう...かもしれませんテーブルアダプターに入れます。生成されたテーブルアダプタは有用なものを継承しないため、リフレクションを使用する必要があります。タイムアウトを変更するための公開関数を公開します。

using System; 
using System.Data.SqlClient; 
using System.Reflection; 

namespace CSP 
{ 
    public class TableAdapterBase : System.ComponentModel.Component 
    { 
     public TableAdapterBase() 
     { 
     } 

     public void SetCommandTimeout(int Timeout) 
     { 
      foreach (var c in SelectCommand()) 
       c.CommandTimeout = Timeout; 
     } 

     private System.Data.SqlClient.SqlConnection GetConnection() 
     { 
      return GetProperty("Connection") as System.Data.SqlClient.SqlConnection; 
     } 

     private SqlCommand[] SelectCommand() 
     { 
      return GetProperty("CommandCollection") as SqlCommand[]; 
     } 

     private Object GetProperty(String s) 
     { 
      return this.GetType().GetProperty(s, BindingFlags.NonPublic | BindingFlags.GetProperty | BindingFlags.Instance).GetValue(this, null); 
     } 
    } 
} 

だからあなたの例では、なる:データセットデザイナで

[System.ComponentModel.DataObjectMethodAttribute 
    (System.ComponentModel.DataObjectMethodType.Select, false)] 
public Scout.ScoutDataTable GetItems(string node, int rank1, int rank2) 
{ 
    ScoutTableAdapter Adapter = new ScoutTableAdapter(); 
    Adapter.SetCommandTimeout(60); 
    return Adapter.GetDataBy(node, rank1, rank2); 
} 

デフォルトのベースクラスSystem.ComponentModel.ComponentがちょうどTableAdapterBase

関連する問題