【问题标题】:.NET - get rows from a MS Access DB with DataSet.NET - 从带有 DataSet 的 MS Access 数据库中获取行
【发布时间】:2018-04-24 14:51:55
【问题描述】:

我有一个 MS Access 数据库,我正尝试使用 DataSet 在 C# 中访问。但是,虽然它可以获取表的列,但它看不到任何行。

代码如下:

    private void Button_Start_Click(object sender, EventArgs e)
    {
        StringBuilder S = new StringBuilder();

        DataTable TheTable = DataSet_TheData.TheTable;

        DataColumnCollection Cols = TheTable.Columns;

        DataTableReader Rows = TheTable.CreateDataReader();
        while (Rows.Read())
        {
            long Id = Rows.GetInt64(0);
            DateTime StartTime = Rows.GetDateTime(3);
            S.AppendLine(Id.ToString() + " - " + StartTime.ToString("M/d h:mm tt"));
        }
        S.AppendLine("Finished reading data");

        Text_Output.Text = S.ToString();
    }

DataSet_TheTable 是指向设计中定义的 Access 数据库的 DataSet。 Text_Output 是一个文本框。

该表包含五行。
但是,Rows.Read 总是返回 false。 此外,如果我尝试在循环之前访问 DataSet_TheData.TheTable.Rows,它会显示零行。 Cols 是从 Access 表中正确填充的,因此它不是无法找到表的情况。

用“new DataTableReader(TheTable)”替换“TheTable.CreateDataReader()”也不起作用。

如何获取代码以查找表中的行?

【问题讨论】:

  • 数据集不会在此方法中填充。您可以显示填充数据集的代码吗?它曾经被调用过吗?
  • 您需要从 MS Access 数据库中获取单个表,还是获取多个表然后迭代数据(即在 POCO 中)?
  • squillman - 数据集本身 (DataSet_TheTable) 是设计端对象。可以找到 TheTable 因为 TheTable.Columns 已填充。 /Kane - 数据库中只有一张表,名为 TheTable。

标签: c# .net ms-access


【解决方案1】:

要在 c# 中遍历 DataTable 的行,您只需:

foreach (DataRow myRow in DataSet_TheData.Tables[0].Rows) {
    //Work with myRow here.
}

这将遍历返回给您的 DataTable 中的 5 行。

然后,在每一行上,您只需使用以下命令访问特定行的列的值:

myRow["myColumnName"]

如果您想以编程方式为每一行执行此操作:

foreach (DataRow myRow in DataSet_TheData.Tables[0].Rows) {
    foreach (DataColumn myCol in DataSet_TheData.Tables[0].Columns) {
       //Use myRow[myCol] here
    }
}

【讨论】:

  • DataSet_TheData.Tables[0].Rows 仍然为空。请注意,DataSet_TheData.Tables[0] 确实找到了数据库的一个表,但 Rows 为空。我需要使用与 OracleCommand 等效的 DataSet 吗?
  • 如果 Rows 为空,那么您的 DataSet 没有填充任何数据,您能否验证您为填充此 DataSet 而编写的查询是否返回了您期望的结果?你还在打电话 Rows.Read() 吗?如果您只是遍历表的行,则不应创建 CreateDataReader() 或调用该方法。
【解决方案2】:

看来,Visual Studio 与其说是链接到现有的 Access 数据库,不如说是对其表进行内部空副本,这就是为什么列显示而行没有显示的原因。当我添加此代码时,表格数据已填充:

TestAccessDatabaseDataSetTableAdapters.TheTableTableAdapter A =
     new TestAccessDatabaseDataSetTableAdapters.TheTableTableAdapter();
A.Fill(TheDataSet.TheTable);

男孩,这很直观......

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-07
    相关资源
    最近更新 更多