如何循环通过DataRow来检索相关列的集合,即(Param Name,Param Type和Param Value)?

时间:2009-02-25 14:46:24

标签: c# ado.net datarow

我正在使用通用报告工具,其中每个报告都由数据库中的“报告”表中的一行表示。

报告行结构:

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

那么,我需要检索报告参数(名称,类型和值)并循环它们以将它们传递给报告?

FYI:参数类型:日期或字符串。      我正在使用嵌入了VS.NET 2005的CrystalReport设计器。

2 个答案:

答案 0 :(得分: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();

就像我说的,如果这对你没有任何帮助,你可以随意忽视它,你不会伤​​害我的感情:)

答案 1 :(得分:0)

当您说DataRow循环时,您的意思是:

DataRow drMyrow = MyTables.Rows[0];

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