2009-02-25 37 views
0

我正在使用通用報表工具,其中每個報表都由數據庫中Reports表中的一行表示。如何通過DataRow循環來檢索相關列集(即參數名稱,參數類型和參數值)?

報表行結構:

ReportID   ReportFileName 
RepParam1Name  RepParam1Type  RepParam1Value 
RepParam2Name  RepParam2Type  RepParam2Value ... RepParam10 

所以,我需要檢索報告的參數(名稱,類型和值)和環路通過他們傳遞他們報告?

參考:參數類型:日期或字符串。 我使用嵌入VS.NET 2005的CrystalReport設計器。

+0

我想我很困惑,你需要找到每個字段是什麼類型?或者你是否試圖以某種方式操縱數據庫中的數據? – Matt 2009-02-25 15:52:19

回答

0

好吧,雖然我不確切知道你要去的是什麼,但我會給你一個我做過的事情的例子,你可以拿它或者離開它。

一些細節給你。這是連接到Access Databse的一個例子,但連接到其他類型的數據庫在連接字符串中是相似的。查找正確語法的連接字符串。

我還有一個名爲currentDataSet的強類型DataSet,並且定義了一個與數據庫類型命名相同且結構相同的表。實現這一點有其他的方式,但是這是我做的方式:

string conString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + sourceString; 
string strSql1 = "SELECT * FROM ReportTable"; 
OleDbConnection con = new OleDbConnection(conString); 
con.Open(); 
OleDbDataAdapter dAdapter = new OleDbDataAdapter(); 
dAdapter.SelectCommand = new OleDbCommand(strSql1, con); 
dAdapter.Fill(currentDataSet, "ReportTable"); 
con.Close(); 

從那裏,你可以操縱數據集內的數據。再下面是一個例子:

int reportTableCount = currentDataSet.ReportTable.Count(); 
int reportTableCounter = 0; 

while (reportTableCounter < reportTableCount) 
{ 
    if (currentDataSet.ReportTable[reportTableCounter].RepParam1Value == "Bad data") 
    { 
     currentDataSet.ReportTable[reportTableCounter].RepParam1Value = "Good data"; 
    } 
    reportTableCounter = reportTableCounter + 1; 
} 

從這一點來說,你現在可以用下面的代碼更新數據庫中的數據:

con.Open(); 
dAdapter.SelectCommand = new OleDbCommand(strSql1, con); 
OleDbCommandBuilder objCommandBuilder = new OleDbCommandBuilder(dAdapter); 
dAdapter.Update(currentDataSet, "ReportTable"); 
con.Close(); 

就像我說的,如果沒有這種幫助你,隨時無視它,你就不會傷害我的感情:)

0

當你說循環通過DataRow你的意思sommething喜歡:

DataRow drMyrow = MyTables.Rows[0]; 

foreach (DataColumn dc in drMyRow) 
{ 
    //do something with the column 
}