Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с базой даных Access, программа на С# 
:(
    Опции темы
alxxx
Дата 29.9.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Здравствуйте товарищи программисты, у меня есть вопрос.

Нужно создать на C#  программу с возможностью создания и открытия базы данных Access, создания в ней таблиц (структура таблицы жестко задана в программе)  добавления, редактирования, удаления и просмотра записей.

 В С# равно как и в базах данных шарю пока очень слабо. 

Как создать базу я вроде понял, а вот как к ней подключиться и работать дальше (добавлять, редактировать, удалять записи)  не знаю. 

Прошу чем-нибудь помочь. Спасибо.
PM MAIL   Вверх
Smorodin
Дата 29.9.2007, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Код

 string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = c:\\db.mdb";
            string commandString = "select `id`, `name`, `name_tr` from vuzs ORDER BY `name`";
            OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);

            DataSet DataSet = new DataSet();

            DataAdapter.Fill(DataSet, "vuzs");

            DataTable dataTable = DataSet.Tables[0];

          

            foreach (DataRow dataRow in dataTable.Rows)
            {
                listBox1.Items.Add(dataRow["name"]);
               
                label1.Text = dataRow["name"].ToString();
             
             
            }



Добавлено через 29 секунд
Код

 string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db.mdb";
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                connection.Open();



                // добавим строку в таблицу vuzs
                OleDbCommand command = new OleDbCommand("UPDATE vuzs SET `name`='" + textName.Text + "', `name_tr`='" + textName_tr.Text + "' WHERE `name_tr`='" + this.VuzNameTr + "'", connection);
                command.ExecuteNonQuery();


            }


Добавлено через 1 минуту и 3 секунды
Код

string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db.mdb";
            using (OleDbConnection connection = new OleDbConnection(connectionString))
            {
                connection.Open();

               

                // добавим строку в таблицу vuzs
                OleDbCommand command = new OleDbCommand("INSERT INTO vuzs(name, name_tr) VALUES('" + textBox1.Text + "', '" + textBox2.Text + "')", connection);
                command.ExecuteNonQuery();

                
            }



--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
alxxx
Дата 30.9.2007, 16:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Спасибо.
А как создавать таблицу в базе?
PM MAIL   Вверх
thomas
Дата 30.9.2007, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



alxxx
RTFM  smile 


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Smorodin
Дата 30.9.2007, 17:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Есть таблица. В ней поля:
id - Счетчик
name - Текстовый
vuz_id  - Числовой.

Есть код:
Код

        public Zvons(int vid)
        {
            InitializeComponent();
            //MessageBox.Show(vid.ToString());
            string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = c:\\db.mdb";
            string commandString = "select `id`, `name` from zvon WHERE `vuz_id`='" + vid + "'";
            OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);

            DataSet DataSet = new DataSet();

            DataAdapter.Fill(DataSet, "zvon");

            DataTable dataTable = DataSet.Tables[0];

          
            foreach (DataRow dataRow in dataTable.Rows)
            {
               ...               
            }
        }



Ругается так:
Цитата
Таблица 'zvon' открыта с монопольным доступом пользователем 'Admin' на машине 'SMORODIN'.

и показывает на строку:
Код
DataAdapter.Fill(DataSet, "zvon");


В чем ошибка? Я еще только учусь...  :unsure:


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
thomas
Дата 30.9.2007, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



Smorodin
Закрой Access и потом юзай базу из своей программы.  smile 
и переименуй экаунт admin на что-нибуь другое, тогда тебя никто не хакнет через общепринятый экаунт admin.  smile 
Иди в политики и там переименовывай.

Это сообщение отредактировал(а) thomas - 30.9.2007, 21:28


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Smorodin
Дата 1.10.2007, 09:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Винда у меня временно, пока винчестер новый не купил. Обычно под никсом и никогда не юзал Ацес. ПРосто пользуясь моментом, решил пошаманить что нибудь под винд. smile

Спасибо за закрытие базы smile Я - ламер.

Добавлено через 53 секунды
Еще возник вопрос: а можно средствами C# узнать, открыта база или нет? smile

Добавлено через 9 минут и 1 секунду
Еще проблема:
Код

            string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = c:\\db.mdb";
            string commandString = "SELECT pars.id, pars.start, pars.end FROM pars WHERE (((pars.zvon_id)=2))";
            OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);

            DataSet DataSet = new DataSet();

            DataAdapter.Fill(DataSet, "pars");

            DataTable dataTable = DataSet.Tables[0];

            int i = 0;


            foreach (DataRow dataRow in dataTable.Rows)
            {
            }

Ругается "IErrorInfo.GetDescription failed with E_FAIL(0x80004005)."
и показывает на "DataAdapter.Fill(DataSet, "pars");"


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
alxxx
Дата 1.10.2007, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Так, всем спасибо, кое что вроде уже раскурил.

Есть еще такой вопрос:
Как мне отобразить таблицу в DataGridView?
PM MAIL   Вверх
thomas
Дата 1.10.2007, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

Репутация: 35
Всего: 65



alxxx

DataGridView.DataSource = MyDataSet
DataGridView.DataMember = "myTableName"



--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
alxxx
Дата 1.10.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Так, отлично, с DataGridView разобрался. 
Осталась сделать последнюю фичу. 
Нужно последовательно просматривать записи таблицы, выводя их в текстбоксы
Как это лучше сделать?  Использовать bindingNavigator? Если да, то как его использовать?


Это сообщение отредактировал(а) alxxx - 1.10.2007, 23:07
PM MAIL   Вверх
Smorodin
Дата 2.10.2007, 07:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



У меня такой вопрос: как узнать количество строк, которые бернул Ацесс по запросу?
код:
Код

 string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = c:\\db.mdb";
            string commandString = "SELECT ...............";
            OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);

            DataSet DataSet = new DataSet();

            DataAdapter.Fill(DataSet, "pars");

            DataTable dataTable = DataSet.Tables[0];

            int i = 0;


            foreach (DataRow dataRow in dataTable.Rows)
            {
            }

Узнать количество строк нужно до вызова foreach


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
alxxx
Дата 2.10.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Цитата(Smorodin @  2.10.2007,  07:40 Найти цитируемый пост)
как узнать количество строк, которые бернул Ацесс по запросу?

Может это глупо, и профессионалы так не делают, но я тупо посчитал в цикле foreach.
PM MAIL   Вверх
Mr_Smith
Дата 2.10.2007, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 27.4.2007

Репутация: нет
Всего: нет



Цитата(alxxx @  2.10.2007,  15:05 Найти цитируемый пост)
Может это глупо, и профессионалы так не делают, но я тупо посчитал в цикле foreach. 

профессионалы юзают 
dataTable.Rows.Count  )))

еще можно так:

int table_count = myDataAdapter.Fill(MyDataSet) //когда несколько таблиц заполняешь за раз

int rows_count = myDataAdapter.Fill(MyDataSet,"mytable1") //когда конкретную

int rows_count = command.ExecuteNonQuery();


Это сообщение отредактировал(а) Mr_Smith - 2.10.2007, 16:56
PM MAIL ICQ   Вверх
alxxx
Дата 2.10.2007, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Подскажите еще пожалуйста, как извлечь данные из  dataTable. То есть мне надо из конкретной строки взять конкретное поле чтобы использовать данные из  него.
PM MAIL   Вверх
Smorodin
Дата 3.10.2007, 03:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Добрейший
**


Профиль
Группа: Участник
Сообщений: 285
Регистрация: 10.4.2006
Где: Пермь

Репутация: нет
Всего: 1



Код

            string connectionString = "provider=Microsoft.JET.OLEDB.4.0;" + "data source = c:\\db.mdb";
            string commandString = "SELECT ...............";
            OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);

            DataSet DataSet = new DataSet();

            DataAdapter.Fill(DataSet, "pars");

            DataTable dataTable = DataSet.Tables[0];

            int i = 0;


            foreach (DataRow dataRow in dataTable.Rows)
            {
                      textBox1.Text = dataRow["column_name"].ToString();
            }


alxxx, это?


--------------------
Сделать можно все, только вопрос - когда?
PM MAIL Skype   Вверх
Mr_Smith
Дата 3.10.2007, 05:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 27.4.2007

Репутация: нет
Всего: нет



dataTable.Rows[i][j]
PM MAIL ICQ   Вверх
alxxx
Дата 4.10.2007, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Подскажите, еще пожалуйста, а как сохранить изменения в самой базе после того как я изменяю dataTable? 
PM MAIL   Вверх
WinNet
Дата 4.10.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 4.3.2007
Где: г.Москва

Репутация: нет
Всего: нет



Цитата

Подскажите, еще пожалуйста, а как сохранить изменения в самой базе после того как я изменяю dataTable?  


Можно так:
Код

OleDbCommand Command = new OleDbCommand("testProcedure", new SqlConnection(connectionString));
Command.CommandType = CommandType.StoredProcedure; // Например с помощью хранимой процедуры
            SqlParameter parametr = null;
            // далее параметры 
            parametr = new SqlParameter("@p1", SqlDbType.Int);
            parametr.Value = p1;
            Command.Parameters.Add(parametr);

            parametr = new SqlParameter("@p2", SqlDbType.Char);
            parametr.Value = p2;
            Command.Parameters.Add(parametr);
            // etc...

            Command.Connection.Open(); // открываем подключение
            Command.ExecuteNonQuery(); // вносим изменения (в данном случае вызывается хр.проц)
            Command.Connection.Dispose(); // осв. память.


Или так:
Код

            OleDbCommand UpCommand = new OleDbCommand();
            UpCommand.CommandType = CommandType.Text;
            OleDbParameter parametr = null;

            parametr = new OleDbParameter("@p1", SqlDbType.Int);
            parametr.SourceColumn = "p1";
            UpCommand.Parameters.Add(parametr);

            parametr = new OleDbParameter("p2", SqlDbType.VarChar);
            parametr.Size = 25;
            parametr.SourceColumn = "p2";
            UpCommand.Parameters.Add(parametr);

            UpCommand.CommandText = "SQL запрос";
            OleDbDataAdapter sqlDA = new OleDbDataAdapter();
            UpCommand.Connection = new OleDbConnection(connectionString);
            sqlDA.UpdateCommand = UpCommand;
            sqlDA.Update(Table);


Это сообщение отредактировал(а) WinNet - 5.10.2007, 07:56
PM ICQ   Вверх
alxxx
Дата 6.10.2007, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Вот есть примерно такая тема:
Как мне сохранить изменения в базу?  Что-то  у меня ничего не получается.

 
Код

OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);
                DataSet dataSet = new DataSet();
                DataTable dataTable = new DataTable();
                DataAdapter.Fill(dataSet, textBox2.Text);
                dataTable = dataSet.Tables[0];
                dataTable.Rows[crec]["Name"] = textBox5.Text;
                dataTable.Rows[crec]["Summ"] = textBox4.Text;   

PM MAIL   Вверх
WinNet
Дата 6.10.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 4.3.2007
Где: г.Москва

Репутация: нет
Всего: нет



Цитата

Вот есть примерно такая тема:
Как мне сохранить изменения в базу?  Что-то  у меня ничего не получается.


Можно так:

Код


OleDbDataAdapter DataAdapter = new OleDbDataAdapter(commandString, connectionString);
                DataSet dataSet = new DataSet();
                DataTable dataTable = new DataTable();
                DataAdapter.Fill(dataSet, textBox2.Text);
                dataTable = dataSet.Tables[0];
                dataTable.Rows[crec]["Name"] = textBox5.Text;
                dataTable.Rows[crec]["Summ"] = textBox4.Text; 
 
                OleDbCommandBuilder cBuild = new OleDbCommandBuilder(DataAdapter);
                DataAdapter.Update(dataTable);


Пишу попамяти , но вроде должно сработать...
PM ICQ   Вверх
alxxx
Дата 7.10.2007, 13:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



WinNet, не работает, пишет такое

Цитата

Dynamic SQL generation for the UpdateCommand is not supported against a SelectCommand that does not return any key column information.

PM MAIL   Вверх
WinNet
Дата 7.10.2007, 13:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 56
Регистрация: 4.3.2007
Где: г.Москва

Репутация: нет
Всего: нет



Хм... Можно попробовать внести тзменения в DataSet и написать так DataAdapter.Update(dataSet). 


PM ICQ   Вверх
alxxx
Дата 29.10.2007, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 7.3.2007

Репутация: нет
Всего: нет



Подскажите, как измененные данные из DataGridView  запихнуть обратно в базу?
PM MAIL   Вверх
uranpro
  Дата 19.6.2009, 10:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



так и не ответили на 1 вопрос в теме!
Как создать базу данных(не таблицу) программно ?

Код

create database MyAcsDB



--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Экскалупатор
Дата 19.6.2009, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 3
Всего: 24



 smile 
uranpro, вопрос нашел свой ответ через два года.
PM MAIL ICQ   Вверх
uranpro
Дата 19.6.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 571
Регистрация: 7.5.2008
Где: Moscow city

Репутация: нет
Всего: 1



 smile 


--------------------
I want a perfect soul
PM MAIL ICQ   Вверх
Страницы: (2) [Все] 1 2 
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, stab, mr.DUDA, Exception.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Базы данных под .NET | Следующая тема »


 




[ Время генерации скрипта: 0.1543 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.