Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа с БД  (Прочитано 15862 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Ned
Новенький

ru
Offline Offline

« : 13-09-2018 17:50 » 

Доброго времени суток!
Код: (C#)
static string connString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\VC10\ReferenceManualOfElements.mdb;Persist Security Info=False";

static string commText_SemCN3 = "SELECT ID, IP_V1, FP_V1, RELATION, CONDITION FROM SemCN3";

static void Main(string[] args)
{
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();

            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = commText_SemCN3;

            DataTable dt = new DataTable(@"D:\VC10\ReferenceManualOfElements.mdb\SemCN3");
            //DataSet ds = new DataSet();

            //OleDbDataAdapter dataAdapter = new OleDbDataAdapter(myCommand);
            //dataAdapter.Fill(ds, "SemCN3");

            OleDbDataReader reader = myCommand.ExecuteReader();

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                var row = dt.Rows[i];
            }
            Console.ReadKey();

}
Не получается вывести строки. В выражении dt.Rows.Count ноль, пробовал разные варианты и с использованием dataAdapter.Fill(ds, "SemCN3"), все равно ноль.
Может кто подскажет в чем дело?
Спасибо!
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #1 : 14-09-2018 04:20 » 

для начала стоит проверить:

conn - валидно

conn.Open() не false

dt - удачно ли создана

reader - какую ошибку рассказывает
Записан

HandKot
Молодой специалист

ru
Offline Offline

« Ответ #2 : 14-09-2018 05:12 » 

вообще фигня какая-то
Вы создаете DataTable
Код:
 DataTable dt = new DataTable(@"D:\VC10\ReferenceManualOfElements.mdb\SemCN3");
никаких проблем и потом выводите из него записи
Код:
 for (int i = 0; i < dt.Rows.Count; i++)
            {
                var row = dt.Rows[i];
            }
тоже все хорошо, но в DataTable нет ничего, т.к Вы туда ничего не загрузили

с DataSet примерно тоже самое
Вы его создали, но не заполнили
При создании DataAdaptera, надо конекшин передавать
Код:
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(myCommand);
должно быть
Код:
OleDbDataAdapter dataAdapter = new OleDbDataAdapter(myCommand, conn );
примерно так
и да, как сказал Алексей++  проверяйте ошибки
Записан

I Have Nine Lives You Have One Only
THINK!
Ned
Новенький

ru
Offline Offline

« Ответ #3 : 14-09-2018 07:41 » 

сделал так:
            OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();

            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = commText_SemCN3;

            DataTable dt = new DataTable(@"D:\VC10\ReferenceManualOfElements.mdb\SemCN3");
            DataSet ds = new DataSet();

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commText_SemCN3, connString);
            dataAdapter.Fill(ds, "SemCN3");

            OleDbDataReader reader = myCommand.ExecuteReader();

            for (int i = 0; i < ds.Tables["SemCN3"].Rows.Count; i++)
            {
                var row = ds.Tables["SemCN3"].Rows; //
            }

все получилось, но выводит сначала последнюю строку потом первую, вторую ...Нужно что бы сначала первую... Что здесь может быть не так?
И вообще хотелось бы выводить без DataSet. Используя только DataTable. Может, что посоветуете?
Записан
RXL
Технический
Администратор

Offline Offline
Пол: Мужской

WWW
« Ответ #4 : 14-09-2018 07:43 » 

Порядок строк в реляционных базах не гарантирован. В запросе указываешь нужную сортировку: ORDER BY ID
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #5 : 14-09-2018 09:48 » 

..
И вообще хотелось бы выводить без DataSet. Используя только DataTable. Может, что посоветуете?

У Вас немного нет понимания.
DataTable заполнить запросом нет возможности, по-моему.
Если он создается руками, то руками и создаются в нём колонки и прочее

в Вашем случае, просто подкорректируйте код

Код:
 OleDbConnection conn = new OleDbConnection(connString);
            conn.Open();

            OleDbCommand myCommand = conn.CreateCommand();
            myCommand.CommandText = commText_SemCN3;

            DataTable dt = new DataTable();
            DataSet ds = new DataSet();

            OleDbDataAdapter dataAdapter = new OleDbDataAdapter(commText_SemCN3, connString);
            dataAdapter.Fill(ds, "SemCN3");
           
            OleDbDataReader reader = myCommand.ExecuteReader();


            dt = ds.Tables["SemCN3"]

            for (int i = 0; i < dt.Rows.Count; i++)
            {
                var row = dt.Rows; //
            }
Записан

I Have Nine Lives You Have One Only
THINK!
Ned
Новенький

ru
Offline Offline

« Ответ #6 : 14-09-2018 11:53 » 

Спасибо!
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines