2011-12-15 4 views
0

Okタイトルが不明なので、説明しましょう。 私は2つのクラス "Form1"と "webinfo"を持っています。私は、サーバーに接続してクエリを実行し、最終的には結果と私のテーブルを埋める見ることができるようにクラス内でデータテーブルを塗りつぶし、別のクラスで使用するテーブルを返す

class WebInfo 
{ 
    string myConnVRM = "Data Source = datascource;" + 
          "Initial Catalog = catalog;" + 
          "Persist Security Info=True;" + 
          "User ID=ID;" + 
          "Password=PASS;" + 
          "providerName=System.Data.SqlClient;"; 
    public WebInfo() 
    { 

    } 

    public void GetVRMs(string vRMs, string start, string end, string acc) 
    { 
     DataTable vrmTable = new DataTable(); 
     SqlConnection connVRM = new SqlConnection(myConnVRM); 
     connVRM.Open(); 
     SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC][email protected]", connVRM); 
     cmdVRM.Parameters.AddWithValue("@acct", acc); 
     cmdVRM.Parameters.AddWithValue("@from", start); 
     cmdVRM.Parameters.AddWithValue("@too", end); 
     SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM); 
     vrmAdapter.Fill(vrmTable); 

     //bind to data grid and display?? 
    } 
} 

:私は次のコードを実行「WEBINFO」で

私のフォームクラスは、GetVRmsメソッドを呼び出し、関連情報を渡します。

でも、私はこのテーブルをフォーム上のデータグリッドにバインドして表示することができます。問題はどうすればこのクラスのテーブルを使用できますか?

私はこれを完全に考えていますか? webinfo.vrmtableと同じくらい簡単ですか?

多くのおかげで、事前に

+0

ところで、あなたはそれをやって接続を出血するつもりだ - あなたは彼らが正しく –

答えて

1

変更

public void GetVRMs(string vRMs, string start, string end, string acc) 

その後、メソッドの最後に

return vrmTable; 

を置きます。

は、このようなあなたのUIのテーブルにバインドします

WebInfo wi = new WebInfo(); 
    DataTable dt = wi.GetVRMs(....); 
    myDataGridView.DataSource = dt; 
    myDataGridView.DataBind(); 
+0

私に配置されていることを確認するために、 '' connVRM'と 'cmdVRM'ためusing'文を持っている必要がありますなぜ私はテーブルの戻り値の型を作りませんでした.....今日は私の脳が故障していると思います。どうもありがとう! – lemunk

1

はどこにでもWEBINFOクラスのオブジェクトを使用してからパブリックプロパティvrmtableとアクセスを定義します。

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 

class WebInfo 
{ 
    public DataTable vrmTable{get;} 

    string myConnVRM = "Data Source = datascource;" + 
          "Initial Catalog = catalog;" + 
          "Persist Security Info=True;" + 
          "User ID=ID;" + 
          "Password=PASS;" + 
          "providerName=System.Data.SqlClient;"; 
    public WebInfo() 
    { 

    } 

    public void GetVRMs(string vRMs, string start, string end, string acc) 
    { 
     SqlConnection connVRM = new SqlConnection(myConnVRM); 
     vrmTable == new DataTable(); 
     connVRM.Open(); 
     SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC][email protected]", connVRM); 
     cmdVRM.Parameters.AddWithValue("@acct", acc); 
     cmdVRM.Parameters.AddWithValue("@from", start); 
     cmdVRM.Parameters.AddWithValue("@too", end); 
     SqlDataAdapter vrmAdapter = new SqlDataAdapter(cmdVRM); 
     vrmAdapter.Fill(vrmTable); 

     //bind to data grid and display?? 
    } 
} 
1

は、なぜあなたは、単にデータテーブルを返さないのですか?

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 
{   
    [...] 
    return vrmTable; 
} 
1

あなたはすなわちvrmTableテーブルを返し、それが本当に意図に依存してデータグリッド

2

のデータソースに割り当てGetVRMs方法のためDataTableの代わりvoidとして戻り値の型を使用することができます。それはユーティリティメソッドである場合、それは、var data = obj.GetVRMs(...)としてすなわち

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 
{ 
    ... 
    return vrmTable; 
} 

とアクセスをデータを返すします。

obj.GetVRMs(..); 
var data = obj.TheTable; 

ノート:テーブルを保持する必要がある場合

、その後、どこかのように

public DataTable TheTable {get;set;} 
public void GetVRMs(string vRMs, string start, string end, string acc) 
{ 
    ... 
    TheTable = vrmTable; 
} 

とアクセスそれを格納

  • GetVRMsは省略オーバーおそらくですが
  • DataTableを動作しますが、多くの人々は、あなたが(ほとんど明らかに:接続プールを飽和)の問題を避けるためにusing文などを必要とするタイプのモデルは、より良いメタファー
  • であることをお勧め
2

あなたのSQLは、ここで間違っているようですよく

SqlCommand cmdVRM = new SqlCommand("SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(varchar,[Date],101) between @StartDate and @EndDate and [AC][email protected]", connVRM); 
     cmdVRM.Parameters.AddWithValue("@acct", acc); 
     cmdVRM.Parameters.AddWithValue("@StartDate", start); 
     cmdVRM.Parameters.AddWithValue("@EndDate", end); 

OR

string SQL = "SELECT Ac, Vrm, Make, Model, MamengineSize, date FROM ReturnValue WHERE convert(datetime,[Date],101) between '"+ start +"' and '"+ end +"' and [AC]=" + acc+ "; "; 
      SqlCommand cmdVRM = new SqlCommand(SQL, connVRM); 

今、あなたはそれをあなたがそれを好きなように使うことができます。

// As DataTable is ref 
public void GetVRMs(string vRMs, string start, string end, string acc, DataTable dtVM) 
{ 
if(dtVM == null) throw new Exception("Message"); 
    ...... 
} 

OR

public DataTable GetVRMs(string vRMs, string start, string end, string acc) 
{ 
    DataTable dtVM=new DataTable(); 
    ....... 

    Return dtVM; 
}