Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Базы данных (ADO.NET, LinqToSql, ORM Entity Framework, NHibernate)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.04.2013, 22:29   #1
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
Вопрос Сохранение изменений в базу данных

С помощью кода:
Код:
    private void Form1_Load(object sender, EventArgs e)
    {
      OleDbConnection connection = new OleDbConnection();
      connection.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=.\\AdoStudy.mdb";
      try
      {
        connection.Open();
      }
      catch
      {
        MessageBox.Show("Ошибка соединения с базой данных AdoStudy.mdb");
        Application.Exit();
      }
      OleDbCommand command = connection.CreateCommand();
      command.CommandText = "SELECT *FROM Contacts";
      da.SelectCommand = command;
      da.FillSchema(myData, SchemaType.Source, "Contacts");
      da.Fill(myData, "Contacts");
      command.CommandText = "SELECT *FROM Phone";
      da.SelectCommand = command;
      da.FillSchema(myData, SchemaType.Source, "Phone");
      da.Fill(myData, "Phone");
      DataRelation rl = new DataRelation("relat", myData.Tables["Contacts"].Columns["idContact"],
                        myData.Tables["Phone"].Columns["idContact"], true);
      myData.Relations.Add(rl);
      BindingSource bsParent = new BindingSource();
      BindingSource bsChild = new BindingSource();
      bsParent.DataSource = myData;
      bsParent.DataMember = "Contacts";
      bsChild.DataSource = bsParent;
      bsChild.DataMember = "relat";
      dgvContacts.DataSource = bsParent;
      dgvPhone.DataSource = bsChild; 
    }
удалось правильно связать таблицы Contacts и Phone и обеспечить при вводе новых значений устновку правильных значений счетчиков таблиц. На форме разместил BindingNavigator и хотел бы при нажатии на иконку в виде дискеты "Сохранить данные" записать все изменения, внесенные в отсоединенном режиме, в базу данных mdb. Подскажите, пожалуйста, как это сделать для моего проекта.
Вложения
Тип файла: zip AdoStudy.zip (29.6 Кб, 8 просмотров)
tumanovalex вне форума Ответить с цитированием
Старый 20.04.2013, 16:54   #2
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
По умолчанию

Сильно упростил проект для освоения основ ADO.NET. С вставной новых значений разобрался:
Код:
private void bindingNavigatorSaveItem_Click(object sender, EventArgs e
{
  OleDbParameter p;
  // insert
  string strIns = "INSERT INTO tbl1(id, txt) VALUES (?, ?)";
  OleDbCommand insertCmd = new OleDbCommand(strIns, con);
  da.InsertCommand = insertCmd;
  p = new OleDbParameter("@id", OleDbType.Integer);
  p.SourceColumn = "id";
  p.SourceVersion = DataRowVersion.Original;
  insertCmd.Parameters.Add(p);
  p = new OleDbParameter("@txt", OleDbType.VarChar);
  p.SourceColumn = "txt";
  p.SourceVersion = DataRowVersion.Original;
  insertCmd.Parameters.Add(p);
 // update
  string strUpd = "UPDATE tbl1 SET id = ?, txt = ?";
   //string strUpd = "UPDATE tbl1 SET txt = ?";
  OleDbCommand updateCmd = new OleDbCommand(strUpd, con);
  da.UpdateCommand = updateCmd;
  p = new OleDbParameter("@id", OleDbType.Integer);
  p.SourceColumn = "id";
  p.SourceVersion = DataRowVersion.Original;
  updateCmd.Parameters.Add(p);
  p = new OleDbParameter("@txt", OleDbType.VarChar);
  p.SourceColumn = "txt";
  p.SourceVersion = DataRowVersion.Original;
  updateCmd.Parameters.Add(p);
  // delete
  string strDel = "DELETE FROM tbl1 WHERE id = ? AND txt = ?";
  OleDbCommand deleteCmd = new OleDbCommand(strDel, con);
  da.DeleteCommand = deleteCmd;
  p = new OleDbParameter("@id", OleDbType.Integer);
  p.SourceColumn = "id";
  p.SourceVersion = DataRowVersion.Original;
  deleteCmd.Parameters.Add(p);
  p = new OleDbParameter("@txt", OleDbType.VarChar);
  p.SourceColumn = "txt";
  p.SourceVersion = DataRowVersion.Original;
  deleteCmd.Parameters.Add(p);
  da.Update(ds.Tables[0]);
}
Но не получается update. При изменении поля txt и попытке записи получаю "Невозможно обновить поле 'id'; не обновляемое поле". Подскажите, пожалуйста, исправить эту ошибку. Проект прикрепляю
Вложения
Тип файла: zip AdoNet2.zip (29.3 Кб, 8 просмотров)
tumanovalex вне форума Ответить с цитированием
Старый 21.04.2013, 18:23   #3
carrotik
Пользователь
 
Регистрация: 31.01.2013
Сообщений: 16
По умолчанию

Цитата:
Сообщение от tumanovalex Посмотреть сообщение
Сильно упростил проект для освоения основ ADO.NET. С вставной новых значений разобрался: Но не получается update. При изменении поля txt и попытке записи получаю "Невозможно обновить поле 'id'; не обновляемое поле". Подскажите, пожалуйста, исправить эту ошибку. Проект прикрепляю
... у вас, скорее всего, поле ID в самой таблице типа AUTOINCREMENT или "формула" .. Оно и не даст обновить .. Да и не надо ...
carrotik вне форума Ответить с цитированием
Старый 23.04.2013, 23:51   #4
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
По умолчанию

А как ошибку исправить?
tumanovalex вне форума Ответить с цитированием
Старый 24.04.2013, 20:38   #5
tumanovalex
Пользователь
 
Регистрация: 07.03.2011
Сообщений: 83
По умолчанию

Получилось так:
Код:
UPDATE tbl1 SET txt = ? WHERE id = ?
tumanovalex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сохранение данных из Edit в базу данных (не Access) Denis3 БД в Delphi 5 18.03.2013 16:45
Сохранение изображения в базу данных bob15 C# (си шарп) 1 03.06.2012 15:38
Одновременное сохранение в базу данных wm_leviathan Общие вопросы по программированию, компьютерный форум 9 23.03.2012 09:07
Сохранение изменений Dmitrov Помощь студентам 0 15.05.2011 13:36
Сохранение изменений в базу данных. Моряк007 БД в Delphi 8 27.06.2010 16:51