将平面 MDB 转换为 SQL 链接的 MDB 后,代码不再用于对记录进行计数

本文关键字:MDB 用于 记录 不再 代码 转换 平面 SQL 链接 | 更新日期: 2023-09-27 17:56:22

我使用了 technet 中的此示例代码来计算 MDB 文件中的记录。将访问数据库中的表转换为链接到 SQL(使用 ODBC)后,程序不再工作。有没有一种简单的方法来修改此代码,以便它仍然可以通过查询 MDB 文件来获取记录计数?

奇怪的是,您可以正常打开MDB文件并查看数据,它只是从SQL中提取数据。为什么此代码在查询 mdb 时不能执行相同的操作?

using System;
using System.Data;
using System.Data.OleDb;
using System.Xml.Serialization;
public class MainClass {
    public static void Main ()
    {
        string strAccessConn = 
                    "Provider=Microsoft.Jet.OLEDB.4.0;DataSource=BugTypes.MDB";
        string strAccessSelect = "SELECT * FROM Categories";
        DataSet myDataSet = new DataSet();
        OleDbConnection myAccessConn = null;
        try
        {
            myAccessConn = new OleDbConnection(strAccessConn);
        }
        catch(Exception ex)
        {
            Console.WriteLine(
                "Error: Failed to create a database connection. 'n{0}", 
                ex.Message);
            return;
        }
        try
        {                
            OleDbCommand myAccessCommand = 
                                new OleDbCommand(strAccessSelect,myAccessConn);
            OleDbDataAdapter myDataAdapter = 
                                new OleDbDataAdapter(myAccessCommand);
            myAccessConn.Open();
            myDataAdapter.Fill(myDataSet,"Categories");
        }
        catch (Exception ex)
        {
            Console.WriteLine(
              "Error: Failed to retrieve the required data from the DataBase.'n{0}",
              ex.Message);
            return;
        }
        finally
        {
            myAccessConn.Close();
        }
        DataTableCollection dta = myDataSet.Tables;
        foreach (DataTable dt in dta)
        {
            Console.WriteLine("Found data table {0}", dt.TableName);
        }
        Console.WriteLine("{0} tables in data set", myDataSet.Tables.Count);
        Console.WriteLine("{0} tables in data set", dta.Count);
        Console.WriteLine("{0} rows in Categories table",
                            myDataSet.Tables["Categories"].Rows.Count);
        Console.WriteLine("{0} columns in Categories table",
                            myDataSet.Tables["Categories"].Columns.Count);
        DataColumnCollection drc = myDataSet.Tables["Categories"].Columns;
        int i = 0;
        foreach (DataColumn dc in drc)
        {
            Console.WriteLine("Column name[{0}] is {1}, of type {2}", i++,
                                dc.ColumnName, dc.DataType);
        }
        DataRowCollection dra = myDataSet.Tables["Categories"].Rows;
        foreach (DataRow dr in dra)
        {
            Console.WriteLine("CategoryName[{0}] is {1}", dr[0], dr[1]);
        }          
    }
}

在此处找到的代码:http://msdn.microsoft.com/en-US/library/AA288452(v=vs.71).aspx

将平面 MDB 转换为 SQL 链接的 MDB 后,代码不再用于对记录进行计数

做一个不是更容易

Select count('x') as rowCount from categories

然后从数据集中的第一条(也是唯一的)记录中提取rowCount

你说它不再有效,并暗示这是计数的问题,但哪个部分不起作用?

Rows.Count 是否为 0,但数据表中的行存在? 还是数据集中没有表还是什么?