powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / update данных из datagridview
14 сообщений из 14, страница 1 из 1
update данных из datagridview
    #37268172
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброе время суток!
это насущный вопрос и много про него написано в интернете, но видимо я ламер пока
в сущности проблема в теме, т.е. необходимо обновить данные в БД, используя измененные значения в datagridview

Во-первых есть таблица:

Код: plaintext
1.
2.
3.
4.
CREATE TABLE dbo.tabl  ( 
	id  	int NULL,
	name	varchar( 100 ) NULL,
	value      	varchar( 50 ) NULL 
	)

вывожу в созданные datagridview через процедуру с параметрами

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
string strCon = "...строка соединения...";
        public OdbcDataAdapter da;
        public DataTable dTable = new DataTable();

private void Form1_Load(object sender, EventArgs e)
        {
             try
            {
                dTable.Clear();
                dTable.Columns.Clear();
                OdbcConnection conn = new OdbcConnection(strCon);
                conn.ConnectionTimeout = 200;
                conn.Open();
                OdbcCommand comm_mon = new OdbcCommand("exec report_proc(?,?)", conn);
                comm_mon.CommandType = CommandType.StoredProcedure;
                comm_mon.Parameters.Add("@param1", OdbcType.VarChar);
                comm_mon.Parameters.Add("@param2", OdbcType.Int);
                comm_mon.Parameters[0].Value = "param1";
                comm_mon.Parameters[0].Direction = ParameterDirection.Input;
                comm_mon.Parameters[1].Value = 2;
                comm_mon.Parameters[1].Direction = ParameterDirection.Input;

                             
                OdbcDataAdapter da = new OdbcDataAdapter(comm_mon);
                DataSet ds = new DataSet(); 
                da.Fill(dTable);

                ///Посмотреть на экране, что получилось, после выборки
                dataGridView1.AutoGenerateColumns = true;
                dataGridView1.DataSource = dTable;
            }
            catch
            {
                MessageBox.Show("Нельзя отобразить", "Ошибка подключения", MessageBoxButtons.OK);
            }
}

поля id и name не редактируются, а поле value меняет юзер, через модальную форму
на которой находится textbox, в который юзер вводит изменение
вот ее вызов
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
        private void dataGridView1_CellMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            form_winPD f_winPD = new form_winPD();
                    f_winPD.textBox3.Text = dataGridView1[2, e.RowIndex].Value.ToString();

            if (f_winPD.ShowDialog() == DialogResult.OK)
            {
               
                    dataGridView1[2, e.RowIndex].Value = f_winPD.textBox3.Text;
                    Update();
                
            }
            
        }

нажав кнопку форма закрывается и в гриде появляется изменение...
и вопрос как теперь внести все измененные данные в таблицу БД ???
ведь у меня по сути есть только DataTable у меня это dTable и в них хранятся данные, а названия таблицы у меня нигде не описано, т.к. я вызываю через процедуру... и как с этим бороться ???

лучше показать на моем примере
...
Рейтинг: 0 / 0
update данных из datagridview
    #37268547
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22,

Я делаю так:
Пишу класс для работы с таблицей БД (или сущностью, если это уместно).

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
Public NotInheritable Class dbeTableName
   
   Private Sub New()
      'private constructor
   End Sub
   
   Private Shared strSQL As String = ""

   Public Shared Function SelectRows() As DataTable
      strSQL = "трам пам пам"
      ...
   End Function

   Public Shared Sub UpdateRows(ByVal DT As DataTable)
       'тут описываю DataAdapter
       DataAdapter.Update(DT)
   End Sub

End Class

В форме пишу:

Код: plaintext
DataGridView.DataSource = dbeTableName.SelectRows()

а потом пишу

Код: plaintext
dbeTableName.UpdateRows(DataGridView.DataSource)

Вот как-то так.
...
Рейтинг: 0 / 0
update данных из datagridview
    #37269727
DevForFun
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вариантов множество решить подобное. можно using code behind style or wizard style. Up to you.
Вот тебе самый простой
1 На формы укладываешь грид и (SQL/Object)датасоурс
2 Связываешь соурс бд(SQL/storedprocedure/C# class)
3 Связываешь грид с датосоурс
4 мапишь поля для вывода

Вот основные шаги,(самый простой способ как по мне), делается почти все визардом.
...
Рейтинг: 0 / 0
update данных из datagridview
    #37277338
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
более менее понятно,
вот только не понял как сделать вставку набора данных
т.е.:

у меня есть DataTable, который заполнен програмно
и как мне быстро загрузить в БД, не перебирая строки?

я создал такую же таблицу с такими же столбцами в БД
и написал
Код: plaintext
1.
2.
OdbcDataAdapter da = new OdbcDataAdapter("select * from table",conn);
                da.Fill(dt);
                da.Update(dt);

но у меня выходит ошибка:
Update requires a valid InsertCommand when passed DataRow collection with new rows.

навернякак надо как-то по другому, но я не нашел пока...(
...
Рейтинг: 0 / 0
update данных из datagridview
    #37277704
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22,

ДатаАдаптеру необходимо явно указать ИнсертКомманд, АпдэйтКомманд и ДелетеКомманд.
А также задать параметры команд, связывая эти параметры со столбцами ДатаТэйбла.

Типа вот так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
Public Shared Sub UpdateRows(ByVal DT As DataTable, ByVal TR As SqlTransaction)
      Dim AD As New SqlDataAdapter()
      strSQL = "INSERT INTO MELTUNIT (MLU__MLP_ID, MLU__UNT_ID, MLU_FORM, MLU_MASSALMF) " _
             & "VALUES (@MLP_ID, @UNT_ID, @FORM, @MASSALMF)"
      AD.InsertCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.InsertCommand.Parameters.Add("@MLP_ID", SqlDbType.Int,  10 , "MLU__MLP_ID")
      AD.InsertCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "MLU__UNT_ID")
      AD.InsertCommand.Parameters.Add("@FORM", SqlDbType.Int,  10 , "MLU_FORM")
      AD.InsertCommand.Parameters.Add("@MASSALMF", SqlDbType.Decimal,  10 , "MLU_MASSALMF")
      strSQL = "UPDATE MELTUNIT SET MLU__MLP_ID=@MLP_ID, MLU__UNT_ID=@UNT_ID, MLU_FORM=@FORM, MLU_MASSALMF=@MASSALMF " _
             & "WHERE MLU_ID=@MLU_ID"
      AD.UpdateCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.UpdateCommand.Parameters.Add("@MLP_ID", SqlDbType.Int,  10 , "MLU__MLP_ID")
      AD.UpdateCommand.Parameters.Add("@UNT_ID", SqlDbType.Int,  10 , "MLU__UNT_ID")
      AD.UpdateCommand.Parameters.Add("@FORM", SqlDbType.Int,  10 , "MLU_FORM")
      AD.UpdateCommand.Parameters.Add("@MASSALMF", SqlDbType.Decimal,  10 , "MLU_MASSALMF")
      AD.UpdateCommand.Parameters.Add("@MLU_ID", SqlDbType.Int,  10 , "MLU_ID")
      strSQL = "DELETE FROM MELTUNIT WHERE MLU_ID=@MLU_ID"
      AD.DeleteCommand = New SqlCommand(strSQL, DBExecutor.CNN, TR)
      AD.DeleteCommand.Parameters.Add("@MLU_ID", SqlDbType.Int,  10 , "MLU_ID")
      AD.Update(DT)
   End Sub
...
Рейтинг: 0 / 0
update данных из datagridview
    #37279515
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
а если я имею DataTable структура и значения соответствуют таблице в БД, то можно как-то не перебирая ячейки взять и вставить данные из этого DataTable в БД...наименования таблиц совпадают...
хотелось бы прям на примере....где есть DataTable и Таблица БД....и как их вставить, не через цикл ?....вообщем мне надо самый быстрый способ
...
Рейтинг: 0 / 0
update данных из datagridview
    #37279667
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22,

Самый быстрый в кодировании или в исполнении обновления?
А без цикла, я думаю никак.

У тебя ДатаТэйбл содержит допустим 100 строк. Из них новых 20, изменённых 20 и ещё 10 "помеченных" удалёнными.
Ты либо сам организуешь цикл по 100 строкам, либо настроенный ДатаАдаптер пробежит по всем 100 строкам,
чтобы узнать какая тут строка новая, изменённая или удалённая, и сформировать, и послать серверу соответствующую
команду.
...
Рейтинг: 0 / 0
update данных из datagridview
    #37280202
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkan,.

а без цикла никак ?
...
Рейтинг: 0 / 0
update данных из datagridview
    #37280385
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22а без цикла никак ?

А зачем?! Ж:)

Я не знаю способа без цикла.
...
Рейтинг: 0 / 0
update данных из datagridview
    #37281582
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkan,

У меня 9000 записей, и пробегатся по ним...каждый раз вставляя не айс по времени, мне надо
типа запроса
select *
into tbl
from table

вообщем нужно сократить время
...
Рейтинг: 0 / 0
update данных из datagridview
    #37281707
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22У меня 9000 записей, и пробегатся по ним...каждый раз вставляя не айс по времени, мне надо
типа запроса
select *
into tbl
from table

вообщем нужно сократить время

Пожалел бы лучше юзверей.
У них скоро косоглазие начнётся - смотреть и редактировать 9000 записей в ДатаГридВью.

Я бы на твоём месте лучше подумал как оптимизировать интерфейс, чтобы не вываливать на
человека такое количество инфы.
...
Рейтинг: 0 / 0
update данных из datagridview
    #37283409
dmitriy22
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Barkan,
в том то и дело, что это юзеры не видят...мне надо залить эти данные в БД и с ними там работать...причем как можно быстрее залить в БД

т.е. у меня всего 2 столбца и 9000 строк в дататабл и надо быстро залить в бд
...
Рейтинг: 0 / 0
update данных из datagridview
    #37284710
Barkan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22,

Тогда при чём тут ДатаГридВью?

Некоторые сервера позволяют одним ИНСЕРТОМ вставлять несколько строк.
Попробуй покопать в эту сторону.
Однако по любому команду надо сформировать, а для этого ЦИКЛОМ по ДатаТэйблу!

Ещё как вариант (правда из твоих сообщений не понятно откуда и как берутся эти 9000 строк),
может их заливать по мере их появления, а не тогда, когда их уже много.

И просто интересно - сколько сейчас длится заливка и сколько ты хотел бы достичь?
И сколько по времени занимает просто ЦИКЛ перебора?
Думаю что сам цикл идёт "влёт".
...
Рейтинг: 0 / 0
update данных из datagridview
    #37285880
Фотография pation
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dmitriy22а если я имею DataTable структура и значения соответствуют таблице в БД, то можно как-то не перебирая ячейки взять и вставить данные из этого DataTable в БД...наименования таблиц совпадают...
хотелось бы прям на примере....где есть DataTable и Таблица БД....и как их вставить, не через цикл ?....вообщем мне надо самый быстрый способ
adapter.Update() - всё уже до вас сделано
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / update данных из datagridview
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]