На главную
ПРАВИЛА FAQ Помощь Участники Календарь Избранное DigiMania RSS
msm.ru
Модераторы: maxim84_, juice
  
> Работа с данными в таблице
    Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много непонятного кода, если где-то будет ошибка, то мне разобраться будет трудно. Без помощи мастеров удалось связать две таблицы, теперь пытаюсь сделать добавление и удаление сразу нескольких строк в таблице:
    ExpandedWrap disabled
      Работа с данными в таблице
      Учусь работать с базой данных Access через ADO.NET. Попробовал поработать с помощью мастеров - не понравилось, очень много
       
      непонятного кода, если где-то будет ошибка, то мне разобраться будет трудно. Без помощи мастеров удалось связать две таблицы,
      теперь пытаюсь сделать добавление и удаление сразу нескольких строк в таблице:
       
      namespace ContactsTest
      {
        public partial class Form1 : Form
        {
          public Form1()
          {
            InitializeComponent();
          }
       
          private OleDbConnection cn;
          private DataSet ds = new DataSet();
          private BindingSource bsMain = new BindingSource();
          private BindingSource bsChild = new BindingSource();
          private OleDbDataAdapter daContact;
          private OleDbDataAdapter daPhone;
          private OleDbCommand cmd;
       
       
          private void DBcon(String DBname)
          {
            cn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Application.StartupPath + "\\\\" + DBname);
            try
            {
              cn.Open();
            }
            catch
            {
              MessageBox.Show("Ошибка соединения с базой данных " + "\"" + DBname + "\"", "Ошибка подключения к базе",
                               MessageBoxButtons.OK, MessageBoxIcon.Error);
              Application.Exit();
            }
          }
       
          private void FillTables()
          {
            daContact = new OleDbDataAdapter("SELECT *FROM tblContact", cn);
            ds.Tables.Add();
            daContact.Fill(ds.Tables[0]);
            daPhone = new OleDbDataAdapter("SELECT *FROM tblPhone", cn);
            ds.Tables.Add();
            daPhone.Fill(ds.Tables[1]);
            DataRelation ContactPhoneRel = new DataRelation("RelContactPhone", ds.Tables[0].Columns[0], ds.Tables[1].Columns[1]);
            ds.Relations.Add(ContactPhoneRel);
            dataGridView1.DataSource = bsMain;
            dataGridView2.DataSource = bsChild;
            bsMain.DataSource = ds;
            bsMain.DataMember = ds.Tables[0].TableName;
            bsChild.DataSource = bsMain;
            bsChild.DataMember = ds.Relations[0].RelationName;
          }
       
          private void daContactsIns()
          {
            cmd = new OleDbCommand("INSERT INTO tblContact(Famil) VALUES(?)", cn);
            OleDbParameter p = new OleDbParameter("@Famil", OleDbType.Char);
            p.SourceColumn = "Famil";
            p.SourceVersion = DataRowVersion.Original;
            cmd.Parameters.Add(p);
            daContact.InsertCommand = cmd;
          }
       
          private void daContactsDel()
          {
            cmd = new OleDbCommand("DELETE FROM tblContact WHERE ID = ?", cn);
            OleDbParameter p = new OleDbParameter("@ID", OleDbType.BigInt);
            p.SourceColumn = "ID";
            p.SourceVersion = DataRowVersion.Current;
            cmd.Parameters.Add(p);
            daContact.DeleteCommand = cmd;
          }
       
       
          private void Form1_Load(object sender, EventArgs e)
          {
            {
              DBcon("Contacts.mdb");
              FillTables();
              daContactsIns();
              daContactsDel();
             }
          }
       
          private void btnSave_Click(object sender, EventArgs e)
          {
            daContact.Update(ds.Tables[0]);
          }
       
          private void btnRefresh_Click(object sender, EventArgs e)
          {
            //dataGridView1.Refresh();
            ds.Tables[1].Clear();
            ds.Tables[0].Clear();
            ds.Relations.Clear();
            FillTables();
          }
        }
      }
    При добавлении или удалении нескольких строк получаю ошибку: "Для элемента Update требуется действительный InsertCommand (DeleteСоmmand) при передаче коллекции DataRow с новыми (удаленными) строками". Помогите, пожалуйста, исправить ошибку. Проект прикрепил.
    Прикреплённый файлПрикреплённый файлContactsForum.zip (33,38 Кбайт, скачиваний: 41)
    0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
    0 пользователей:


    Рейтинг@Mail.ru
    [ Script Execution time: 0,0835 ]   [ 20 queries used ]   [ Generated: 16.11.18, 16:02 GMT ]