2011-12-15 57 views
0

好的標題可能不清楚,請讓我解釋一下。 我有2個類,「Form1」和「webinfo」。在一個類中填充數據表,返回在另一個類中使用的表

「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?? 
    } 
} 

,你可以看到我連接到一臺服務器,運行查詢,終於填補我的表的結果。

我的表單類然後調用GetVRms方法,傳遞相關的信息。

但我需要做的是現在將此表綁定到我的窗體上的數據網格,所以我可以顯示。唯一的問題是我如何使用這個班級的表格?

我完全在想這個嗎?它和webinfo.vrmtable一樣簡單嗎?

很多感謝

+0

順便說一句,你要流血的連接這樣做 - 你應該有``爲和connVRM``cmdVRM` using`報表,以確保它們設置正確 – 2011-12-15 09:17:02

回答

1

變化

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

public DataTable 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

我不知道爲什麼我沒有爲桌子做出返回類型.....認爲我的大腦今天失敗了。非常感謝! – lemunk 2011-12-15 09:38:38

1

使用WebInfo類的對象在任何地方定義的公共屬性vrmtable和訪問它。

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

你爲什麼不乾脆返回的DataTable?

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

你可以使用返回類型DataTable而不是voidGetVRMs方法返回表即vrmTable,然後將其分配給DataGrid的

2

這真的取決於意圖的數據源。如果這是一個實用程序的方法,然後使之返回數據,即

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

和訪問作爲var data = obj.GetVRMs(...)

如果表需要保留,那麼它存儲在某處

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

和訪問爲:

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

筆記:

  • 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; 
} 
相關問題