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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как изменять базу данных через DatagridView на c#, изменение базы данных через datagridview 
:(
    Опции темы
ucer
Дата 24.5.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



создал подключение к базе и отобразил ее на datagridview, все работает, но когда при запуске программы изменяю данные  отдельных ячеек datagridview, изменения  не передаются в базу. Я использую базу данных access  и соединение oledb. Спасибо заранее
PM MAIL   Вверх
Выхухоль
Дата 24.5.2010, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ucer @  24.5.2010,  10:18 Найти цитируемый пост)
создал подключение к базе и отобразил ее на datagridview, все работает, но когда при запуске программы изменяю данные  отдельных ячеек datagridview, изменения  не передаются в базу. Я использую базу данных access  и соединение oledb. Спасибо заранее 


В таблицу данные заливаешь, или в датасет? Напиши код, посмотрим в чем может быть прикол!
PM MAIL ICQ   Вверх
ucer
Дата 24.5.2010, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Это код подключения к базе, все работает и в гриде отображается, но при изменении полей грида поля базы не меняются, если есть решение напишите!!!!
Код

private void Form1_Load(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test/test.mdb");
            OleDbCommand com = new OleDbCommand();
            OleDbDataAdapter adap = new OleDbDataAdapter();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            com.Connection = conn;
            com.CommandText = "Select * from test";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
        }

PM MAIL   Вверх
Выхухоль
Дата 25.5.2010, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ситуация проста до безумия...
Код

OleDbDataAdapter adap = new OleDbDataAdapter();

DataTable dt = new DataTable();

вот это дело делаешь глобальным, так чтоб в других функциях тоже видно было..


На форму рядом с гридом кидаешь кнопочку, пишешь на ней текст Save а в ее обработчике событий пишеш след. ерундень:

Код

adap.Update(dt);


и по идее все должно быть пучком!

Это сообщение отредактировал(а) Выхухоль - 25.5.2010, 09:20
PM MAIL ICQ   Вверх
ucer
Дата 25.5.2010, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Код


        OleDbConnection conn=new OleDbConnection();
        OleDbCommand com=new OleDbCommand();
        OleDbDataAdapter adap=new OleDbDataAdapter();
        DataSet ds=new DataSet();
        DataTable dt=new DataTable();


        private void Form1_Load(object sender, EventArgs e)
        {
            OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test/test.mdb");
            OleDbCommand com = new OleDbCommand();
            OleDbDataAdapter adap = new OleDbDataAdapter();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable();
            com.Connection = conn;
            com.CommandText = "Select * from test";
            conn.Open();
            adap.SelectCommand = com;
            adap.Fill(ds);
            dt = ds.Tables[0];
            dataGridView1.DataSource = dt;
            conn.Close();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            adap.Update(dt);
            
        }


Написал этот код все рано не помогает, если не трудно напишите свой код
PM MAIL   Вверх
mrbrooks
Дата 25.5.2010, 13:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(Выхухоль @  25.5.2010,  10:19 Найти цитируемый пост)
и по идее все должно быть пучком!

а вот не факт. 
по логике вещей если уж обновляем через адаптер, то для начала бы надо заюзать SqlDataAdapter.UpdateCommand
а уже затем SqlDataAdapter.Update
PM MAIL   Вверх
Выхухоль
Дата 25.5.2010, 15:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mrbrooks @  25.5.2010,  13:54 Найти цитируемый пост)
а вот не факт. 
по логике вещей если уж обновляем через адаптер, то для начала бы надо заюзать SqlDataAdapter.UpdateCommand
а уже затем SqlDataAdapter.Update 

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


Цитата(ucer @  25.5.2010,  12:42 Найти цитируемый пост)
Написал этот код все рано не помогает, если не трудно напишите свой код 


получай код формы:
Код

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        OleDbDataAdapter adap = null;
        DataSet ds = new DataSet();

        private void Form1_Load(object sender, EventArgs e)
        {
            adap = new OleDbDataAdapter("Select * from test", new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:/test/test.mdb"));
            OleDbCommandBuilder bulder = new OleDbCommandBuilder(adap);
            adap.UpdateCommand = bulder.GetUpdateCommand();
            adap.InsertCommand = bulder.GetInsertCommand();
            adap.DeleteCommand = bulder.GetDeleteCommand();
            adap.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        }

        private void button1_Click(object sender, EventArgs e)
        {
            adap.Update(ds.Tables[0]);
        }

        
    }


советую почитать тему по этой ссылке:
MSDN Data Adapter

Это сообщение отредактировал(а) Выхухоль - 25.5.2010, 15:31
PM MAIL ICQ   Вверх
mrbrooks
Дата 25.5.2010, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



Цитата(Выхухоль @  25.5.2010,  16:26 Найти цитируемый пост)
уважаемый, я вам советую в случае знания правельного ответа писать его в тему (чтобы было понятно автору поста), а не открывать дисскусии на тему "а вот и не факт"

уважаемый давайте не будем давать советов. 
здесь никто ничем друг другу не обязан.
и никто никаких дисскуссий не открывает. я указал вам на не точность. вот и все. а мог бы и вообще забить. smile
PM MAIL   Вверх
ucer
Дата 25.5.2010, 19:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



запустил код который вы написали выдает такую ошибку на строке
Код
adap.UpdateCommand = bulder.GetUpdateCommand();

Код

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

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


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

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



ucer, ключевое поле в таблице test есть?
PM MAIL   Вверх
ucer
Дата 27.5.2010, 06:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо вам большое мужики, я забыл поставить ключевое поле, вот почему генерировалась ошибка!!!

Это сообщение отредактировал(а) ucer - 27.5.2010, 06:53
PM MAIL   Вверх
Kateyr
Дата 9.6.2010, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребята помогите!!  я вставил код который написал Выхухоль. Ввожу данные в произвольно выбранное поле датагрид, жму сохранить, но не получается, выдает следующую ошибку: 

adap.Update(ds.Tables[0]);

Ln 35: Ошибка синтаксиса (пропущен оператор) в выражении запроса '((id = ?) AND ((? = 1 AND tel IS NULL) OR (tel = ?)) AND ((? = 1 AND all IS NULL) OR (all = ?)))'.

вот код запросов после выбивания ошибки:

INSERT INTO Таблица1 (id, tel, all) VALUES (?, ?, ?)

UPDATE Таблица1 SET tel = ? WHERE ((id = ?) AND ((? = 1 AND tel IS NULL) OR (tel = ?)) AND ((? = 1 AND all IS NULL) OR (all = ?)))

DELETE FROM Таблица1 WHERE ((id = ?) AND ((? = 1 AND tel IS NULL) OR (tel = ?)) AND ((? = 1 AND all IS NULL) OR (all = ?)))


Если добавляю новую запись через датагрид, то выдает ошибку:

adap.Update(ds.Tables[0]);

Ln 35: Ошибка синтаксиса в инструкции INSERT INTO.



кидаю свой код:

Код


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;


namespace WindowsApplication6
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        OleDbDataAdapter adap = null;
        DataSet ds = new DataSet();

        private void Form1_Load(object sender, EventArgs e)
        {
            adap = new OleDbDataAdapter("Select * from [Таблица1]", new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"схема данных.mdb"));
            OleDbCommandBuilder bulder = new OleDbCommandBuilder(adap);
            adap.UpdateCommand = bulder.GetUpdateCommand();
            adap.InsertCommand = bulder.GetInsertCommand();
            adap.DeleteCommand = bulder.GetDeleteCommand();
            adap.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            adap.Update(ds.Tables[0]);
        }
    }
}




вот архив проекта: http://files.mail.ru/1RU5GM

Помогите плиз, нужно очень срочно!!!
Второй день ищю метод обновления БД через датагрид...




Присоединённый файл ( Кол-во скачиваний: 54 )
Присоединённый файл  WindowsApplication6.rar 170,72 Kb
PM MAIL   Вверх
Выхухоль
Дата 10.6.2010, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



вся проблема заключается в русском названии таблицы "Таблица1"...поменяй name in DB and all will fine...
в общем привыкай писать все на английском, забывай русских если хочешь программировать...


к примеру вот так твой код у меня работает прекрасно..
Код

public Form1()
        {
            InitializeComponent();
        }

        OleDbDataAdapter adap = null;
        DataSet ds = new DataSet();

        private void Form1_Load(object sender, EventArgs e)
        {
            adap = new OleDbDataAdapter("Select * from Alex_Table", new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + @"схема данных.mdb"));
            OleDbCommandBuilder bulder = new OleDbCommandBuilder(adap);
            adap.UpdateCommand = bulder.GetUpdateCommand();
            adap.InsertCommand = bulder.GetInsertCommand();
            adap.DeleteCommand = bulder.GetDeleteCommand();
            adap.Fill(ds);
            dataGridView1.DataSource = ds.Tables[0];
        }
        private void button1_Click_1(object sender, EventArgs e)
        {
            adap.Update(ds.Tables[0]);
        }


заметил название я поменял? действуй...
PM MAIL ICQ   Вверх
Kateyr
Дата 10.6.2010, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



исправил. Ошибки теже... если не сложно авторизуйте меня в аське 577746132
PM MAIL   Вверх
Kateyr
Дата 14.6.2010, 13:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



решил проблему. вот код:

Код

 private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
             int index1 = dataGridView1.CurrentRow.Index;
             int id = Convert.ToInt32(dataGridView1[0, index1].Value);
             string name_k = dataGridView1[1, index1].Value.ToString();
              int cost_per = Convert.ToInt32(dataGridView1[2, index1].Value);

                            
              con.Open();
              OleDbCommand refresh = new OleDbCommand("UPDATE [Таблица кампаний] SET [Таблица кампаний].id = " + id + ", [Таблица кампаний].[Название организации] = '" + Convert.ToString(name_k) + "', [Таблица кампаний].[Цена] = '" + cost_per + "' WHERE [Таблица кампаний].id = " + id_n + "", con);
              OleDbDataReader read = refresh.ExecuteReader();
              con.Close();
 
              dataGridView1.Refresh();

        }
 private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e)
        {
            y = dataGridView1.CurrentCellAddress.Y;
            x = dataGridView1.CurrentCellAddress.X;
            str = dataGridView1[x, y].Value.ToString();
            switch (table_tip)
            {
                    
                         if (dataGridView1[0, y].Value.ToString() != "")
                            {
                                id_n = Convert.ToInt32(dataGridView1[0, y].Value);
                            }

                            if (str == "")
                            {
                                if ((dataGridView1.CurrentCellAddress.X) == 0)
                                {

                                    con.Open();
                                    OleDbCommand max_id = new OleDbCommand("SELECT Max ([Таблица кампаний.id]) FROM [Таблица кампаний]", con);
                                    OleDbDataReader read_max_id = max_id.ExecuteReader();
                                    while (read_max_id.Read())
                                    {
                                        id_n = Convert.ToInt32(read_max_id[0].ToString()) + 1;
                                    }

                                    dataGridView1[dataGridView1.CurrentCellAddress.X, y].Value = id_n;

                                    OleDbCommand max_id22 = new OleDbCommand("INSERT into [Таблица кампаний] (id) values (" + id_n + ")", con);
                                    OleDbDataReader read_max_id22 = max_id22.ExecuteReader();
                                    con.Close();


                                    dataGridView1.Refresh();
                                }
                                    



проект прилагается. 

Присоединённый файл ( Кол-во скачиваний: 308 )
Присоединённый файл  Project_Test.rar 174,49 Kb
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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