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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Update это что? НЕ могу изменить запись 
V
    Опции темы
Doss
Дата 11.7.2008, 17:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Уважаемыые программисты, прошу прощения за повторную тему.
Все темы по ADO.NET перерыл, во всех книгах написано одно и тоже почти.
Вот что я понял: Для изменения записи в таблице необходимо выделить строку и изменив их просто обновить, так как за обовление базу отвечает команда адаптера da.Updete(ds,"MyTable") но при условии что написана хранимая процедура по эту команду, либо используется CommandBailder определенного провайдера. Также за ввод данных отвечает InsertCommand (хранимая процедурка) ну и соответственно по удалению.
Я предпочел все писать своими питью, вот и дописался, не могу отредатировать существующую запись. Перепробывал все, получаю изменения в гриде, т.е. в Table.  Так вот DataSet фактически имеет изменения, остается передать адептеру, который обновить в базе, используя команду da.Update(ds,"MyTable")
Вот именно на этой строке вылетает "Не соответствие типов данных". Думал в хрон проц. Ет, вроде все нормально, короче я застрял. Буду благодарен если мои усилия вы подкрепети знаниями этого. Благодарен как всегда, и сайту огромное спасибо.
Вот код
Код

conn = new OleDbConnection(conectingString);
            selCommand = new OleDbCommand("select * from TB ", conn);
            conn.Open();
            selCommand.CommandType = CommandType.Text;
            da = new OleDbDataAdapter(selCommand);
            ds = new DataSet();
            da.Fill(ds, "TB");
            dgv.DataSource = ds.Tables["TB"];

            DataRow insertRow = ds.Tables["TB"].Rows[1];
            insertRow["id"] = "Я";
            insertRow["test"] = "Изменился";
           
           
                try
                {
                    da.Update(ds,"TB");//.Tables["TB"].GetChanges(DataRowState.Modified));

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message, ex.Source);
                }
       
            conn.Close();
            //----------------------------------------------

И вот хронимка на Update
Код

da.UpdateCommand = new OleDbCommand("Update TB SET test=@test,id=@id WHERE ID_test=@ID_test", conn);
            da.UpdateCommand.CommandType = CommandType.Text;

            param = da.UpdateCommand.Parameters.Add(new OleDbParameter("@ID_test", OleDbType.Integer));
            param.SourceColumn = "ID_test";
            param.SourceVersion = DataRowVersion.Current;

            param = da.UpdateCommand.Parameters.Add(new OleDbParameter("@id", OleDbType.Char));
            param.SourceColumn = "id";
            param.SourceVersion = DataRowVersion.Current;

            param = da.UpdateCommand.Parameters.Add(new OleDbParameter("@test", OleDbType.Char));
            param.SourceColumn = "test";
            param.SourceVersion = DataRowVersion.Current;


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


Новичок



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

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



Цитата

DataRow insertRow = ds.Tables["TB"].Rows[1];
insertRow["id"] = "Я";
insertRow["test"] = "Изменился";



это что? и зачем?
попробуйте так (по другому событию)

Код

private void блаблабла()
{
da.UpdateCommand.Parameters["@id"].Value="Я";
da.UpdateCommand.Parameters["@test"].Value="Изменился";
da.UpdateCommand.Parameters["@ID_test"].Value=666;
da.Update(ds);
}


хотя вообще непонятно что к чему в вашем коде? описанная в учебниках метода предпологает что пользователь обновляет записи в гриде, нажимает кнопку сохранить по которой вызывается датаАдаптер.Апдейт(ДС) и обновление происходит в источнике данных.

и то что вы описали как хранимку на самом деле SQL запрос с параметрами

PM MAIL   Вверх
Doss
Дата 11.7.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Row[1] вторая запись по строке, задаю их изменения, вопрос то в другом, почему при обнавлении так=da.Update(ds,"TB") выдает искл, хотя SQL запрос на обновение обработан,
Не знаю, но попробую ваш пример, но что то с ключем, т.е. счетчик мне то не нужет, так как он остается темже, а содержание в этой строке изменяется, спасибо за участие, пока до конца не пойму буду сидеть за этим....
PM MAIL   Вверх
Doss
Дата 12.7.2008, 13:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



<Большое спасибо за участие! smile 
Разобрался с этим кодом, теперь новерника не забыть эти три дня и ночи без аппетита smile 
Решил вот так
Код

//Изменение c формы
        private void dgv_DoubleClick(object sender, EventArgs e)
        {
            da1 = new OleDbDataAdapter(selCommand);
            ds = new DataSet();
            da1.Fill(ds, "TB");
            table = ds.Tables[0];

            if (dgv.SelectedRows.Count > 0 && dgv.SelectedRows[0].DataBoundItem != null)
            {
               
                DataRow selRow = ((DataRowView)dgv.SelectedRows[0].DataBoundItem).Row;
                selID = Convert.ToInt32(selRow["ID_test"]);
              
                DataRow insertRow = ds.Tables["TB"].Rows[0];
               
                //MessageBox.Show("Идентификационный номер=" + selID);
                Form3 edr = new Form3(selRow);
               
                
                if (edr.ShowDialog() == DialogResult.OK)
                {
                    try
                    {

                        selRow.BeginEdit();

                        insertRow["id"] = edr.textBox1.Text;
                        insertRow["test"] = edr.textBox2.Text;
                        UpdeteMi(selID);
                       
                        da1.Update(ds, "TB");

                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.Message, ex.Source);
                    }
                }
                else
                {
                    selRow.CancelEdit();
                }
               
            }
        }

Ну и метод содержащий хранимку, которая вызывается при Update 
Код

 private void UpdeteMi(int selID)
        {
            da1.UpdateCommand = new OleDbCommand("update TB set id=?, test=?  where ID_test=" + selID + "", conn);
            
            da1.UpdateCommand.CommandType = CommandType.Text;

            param = da1.UpdateCommand.Parameters.Add(new OleDbParameter("@id", OleDbType.Char));
            param.SourceColumn = "id";
            param.SourceVersion = DataRowVersion.Current;

            param = da1.UpdateCommand.Parameters.Add(new OleDbParameter("@test", OleDbType.Char));
            param.SourceColumn = "test";
            param.SourceVersion = DataRowVersion.Current;

            param = da1.UpdateCommand.Parameters.Add(new OleDbParameter("@ID_test", OleDbType.Integer));
            param.SourceColumn = "ID_test";
            param.SourceVersion = DataRowVersion.Current;

        }

Да, еще, загвоздка была в созданий еще одного адаптера

Это сообщение отредактировал(а) Doss - 12.7.2008, 13:19
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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