Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > База данных с нуля


Автор: MacTep 15.12.2006, 23:46
Есть база данных MS Access. Нужно создать приложение на C# для элементарной работы с данной базой. То есть к ней надо подконнектиться, сделать пару выборок, ввести, изменить, удалить данные. С чего начать? И как это сделать ручками, а не при помощи мышкового программирования? smile Только в коде? Возможно ли это? Может у кого примеры есть таких проектов?

Автор: thomas 16.12.2006, 00:26
MacTep
Сначала отвечу, а потом спрошу.

conStr = "provider=microsoft.jet.oledb.4.0; data source=" + @"D:\vti\Margo\Prog3.mdb";

все через OleDb: connection, command, DataAdapter ну и что еще нужно DataSet, DataTable, DataRow, DataView.

Создаешь соединение, определяешь запрос ну и DataAdapter.Fill(DataSet, nametable)

Все твои данные в памяти, отображай их где нужно и делай с ними все что хошь.

После изменений не забывай делать DataAdapter.UpDate(nametable)

В общем ADO.NET 


Я конечно не жлоб, но поройтись по ссылкам внизу этой страницы тебе в лом?


Автор: MacTep 16.12.2006, 09:33
Цитата(thomas @  16.12.2006,  00:26 Найти цитируемый пост)
Я конечно не жлоб, но поройтись по ссылкам внизу этой страницы тебе в лом?
Мне не подходит все, что есть внизу страницы. smile А тебе большое спасибо за то, что ты посоветовал хоть что-то... Огромное спасибо и за пример программки... Буду разбираться... Надеюсь, все получится... В общем, + в репутацию. smile

Автор: mr.DUDA 16.12.2006, 13:24
Код
using System;
using System.Data;
using System.Data.OleDb;

class Class1
{
    static void Main()
    {
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb";
        string queryString = "SELECT Id, CustomerName FROM Customers";

        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            OleDbCommand command = new OleDbCommand(queryString, connection);
            connection.Open();
            using (OleDbDataReader reader = command.ExecuteReader())
            {
                while (reader.Read())
                {
                    int customerId = reader.GetInt32(0);
                    string customerName = reader.GetString(1);

                    Console.WriteLine("Customer ID={0}, Name={1}", customerId, customerName);
                }
                reader.Close();
            }
        }
    }
}

Автор: MacTep 16.12.2006, 13:30
mr.DUDA, мне нужно работать не в консоли, а нормальное Windows32 приложение. smile

Автор: mr.DUDA 16.12.2006, 13:31
Цитата(MacTep @  16.12.2006,  12:30 Найти цитируемый пост)
mr.DUDA, мне нужно работать не в консоли, а нормальное Windows32 приложение.

А есть принципиальная разница ? smile

Выборка данных будет делаться точно таким же способом. Полученные результаты выводим хоть в текстбокс, хоть в листвью, хоть в грид... Можно, конечно, дизайнер заюзать (и проще, и быстрее), но ты говоришь что нужно "всё делать руками".

Добавлено @ 13:33 
З.Ы. нужен какой-то конкретный совет - задавай более конкретный вопрос.

Автор: thomas 16.12.2006, 20:08
MacTep
Привет.
Вот посмотри еще и этот пример.

Автор: MacTep 25.12.2006, 22:52
Разобрался с соединением с базой данных. Теперь проблемы.... Как добавить или удалить данные в таблицу... smile

Автор: mr.DUDA 26.12.2006, 11:09
Цитата(MacTep @  25.12.2006,  21:52 Найти цитируемый пост)
Как добавить или удалить данные в таблицу...

Для удаления и добавления есть метод ExecuteNonQuery у команды. Или датасетом можно пользоваться.

Пример, база та же что и выше:
Код
using System;
using System.Data;
using System.Data.OleDb;

class Class1
{
    static void Main()
    {
        string connectionString = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\mydatabase.mdb";

        using (OleDbConnection connection = new OleDbConnection(connectionString))
        {
            connection.Open();

            Console.WriteLine("Сначала было так:");
            АЧегоУНасТамВТаблице(connection);

            // добавим строку в таблицу Customers
            OleDbCommand command = new OleDbCommand("INSERT INTO Customers(CustomerName) VALUES('Вася')", connection);
            command.ExecuteNonQuery();

            Console.WriteLine(Environment.NewLine + "После добавления строки стало так:");
            АЧегоУНасТамВТаблице(connection);

            // удалим из таблицы запись
            command = new OleDbCommand("DELETE FROM Customers WHERE CustomerName='Вася'", connection);
            command.ExecuteNonQuery();

            Console.WriteLine(Environment.NewLine + "После удаления стало так:");
            АЧегоУНасТамВТаблице(connection);
        }
    }

    static void АЧегоУНасТамВТаблице(OleDbConnection connection)
    {
        OleDbCommand command = new OleDbCommand("SELECT * FROM Customers", connection);
        using (OleDbDataReader reader = command.ExecuteReader())
        {
            while (reader.Read())
            {
                int customerId = reader.GetInt32(0);
                string customerName = reader.GetString(1);

                Console.WriteLine("Customer ID={0}, Name={1}", customerId, customerName);
            }
        }
    }
}

Автор: thomas 26.12.2006, 20:40
Цитата(MacTep @  25.12.2006,  22:52 Найти цитируемый пост)
Как добавить или удалить данные в таблицу...


MacTep
Привет.
Что бы добавить данные(новая строка) в таблицу, как и подсказал mr.DUDA, существует команда "INSERT INTO ... ".
Что бы удалить данные (строку) используют команду "DELETE ... ".
Это методы работы с таблицами Базы на прямую.

Но добавлять данные в Базу можно и по другому, работая через ДатаСет.
К примеру если нужно составить заказ или оформить продажу, то каждый раз конектиться к Базе и проводить добавление или удаление данных не совсем интересно. Ведь строки в заказ могут как добавляться, так и удаляться. Поэтому гораздо рациональнее произвести редактирование заказа-продажи в таблице ДатаСета, а потом уже когда все выбрано и больше не будет изменений произвести обновление соответствующей таблицы в Базе, вызвав для этого метод UpDate для DataAdaptera.

Автор: RedButterfly 31.7.2007, 11:23
ошибку свою исправила
(в предварительном просмотре увидела....)
сейчас делаю удаление, обновление и вставку в бд...
ни первое ни второе ни третье не получается...)

Автор: RedButterfly 31.7.2007, 13:06
данные не обновляются!
Код

private void buttonUpd_Click(object sender, System.EventArgs e)
        {
            connection.Open(); 
            oleDbUpdateCommand.Connection = connection;    
            
            oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Название", System.Data.OleDb.OleDbType.VarChar, 50, "Название"));
            
oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Страна", System.Data.OleDb.OleDbType.VarChar, 50, "Страна"));
            
oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Кредит", System.Data.OleDb.OleDbType.VarChar, 50, "Кредит"));
            
//oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Номер_", System.Data.OleDb.OleDbType.Decimal, 0, System.Data.ParameterDirection.Input, false, ((System.Byte)(10)), ((System.Byte)(0)), "Номер", System.Data.DataRowVersion.Original, null));
            
//oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Название_", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Название", System.Data.DataRowVersion.Original, null));    
            
//oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Страна_", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Страна", System.Data.DataRowVersion.Original, null));    
            
//oleDbUpdateCommand.Parameters.Add(new System.Data.OleDb.OleDbParameter("Кредит_", System.Data.OleDb.OleDbType.VarWChar, 50, System.Data.ParameterDirection.Input, false, ((System.Byte)(0)), ((System.Byte)(0)), "Кредит", System.Data.DataRowVersion.Original, null));    
            dataAdapter.UpdateCommand = oleDbUpdateCommand;
            
//dataAdapter.Update(dataSet, "Testik");
 потому что тут пишет ошибку
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll

            dataTable.AcceptChanges();
            connection.Close();
        }

Автор: 1datr 2.3.2009, 12:46
А меня интересует именно мышковое. Потому что как руками делать это все пишут.  А С# он и создан для того, чтобы мышкой все делать.

Автор: Rififi 2.3.2009, 19:18
imho мышко-елозение в данном случае как раз будет уместным.
добавляешь в проект свой mdb файл. потом из таблиц (см. Server Explorer) создаешь типизированные датасеты. Далее работаешь с БД на высокоуровневом языке. 

Автор: gambit 5.3.2009, 16:29
1datr, а потом мы думаем, почему на сишники опускают, типа мы ничего не умеем и подо все ищем компонент.

Цитата(1datr @  2.3.2009,  12:46 Найти цитируемый пост)
А С# он и создан для того, чтобы мышкой все делать. 

С такой логикой брат ты далеко не уедешь.

Автор: Lite 5.3.2009, 18:12
Цитата(MacTep @ 16.12.2006,  13:30)
mr.DUDA, мне нужно работать не в консоли, а нормальное Windows32 приложение. smile

Вначале выучи WinForm, а потом ADO.NET в WinForm.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)