Код больше не работает для подсчета записей после преобразования плоского MDB в SQL-связанный MDB - PullRequest
0 голосов
/ 13 мая 2011

Я использовал этот пример кода из 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

Ответы [ 2 ]

1 голос
/ 13 мая 2011

Не было бы проще сделать

Select count('x') as rowCount from categories

и затем извлеките rowCount из первой (и единственной) записи в наборе данных.

0 голосов
/ 13 мая 2011

Вы говорите, что это больше не работает и подразумеваете, что это проблема с количеством, но какая часть не работает?

Имеет ли Rows.Count 0, но есть ли строки в таблицах данных? Или в наборе данных нет таблиц или что?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...