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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# ADO.NET Не удается добавить несколько строк 
:(
    Опции темы
tap1956
  Дата 8.2.2017, 23:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В тестовом проекте:
Код
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Data.OleDb;
using System.Windows.Forms;

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 OleDbParameter p;


    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);
      p = new OleDbParameter("@Famil", OleDbType.WChar);
      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);
      p = new OleDbParameter("@ID", OleDbType.BigInt);
      p.SourceColumn = "ID";
      p.SourceVersion = DataRowVersion.Current;
      cmd.Parameters.Add(p);
      daContact.DeleteCommand = cmd;
    }

    private void daContactsUpd()
    {
      cmd = new OleDbCommand("UPDATE tblContact SET Famil = ? WHERE ID = ?", cn);
      p = new OleDbParameter("@Famil", OleDbType.WChar);
      p.SourceColumn = "Famil";
      p.SourceVersion = DataRowVersion.Current;
      cmd.Parameters.Add(p);
      p = new OleDbParameter("@ID", OleDbType.BigInt);
      p.SourceColumn = "ID";
      p.SourceVersion = DataRowVersion.Current;
      cmd.Parameters.Add(p);
      daContact.UpdateCommand = cmd;
    }


    private void Form1_Load(object sender, EventArgs e)
    {
      {
        DBcon("Contacts.mdb");
        FillTables();
        daContactsIns();
        daContactsDel();
        daContactsUpd();
      }
    }

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

    private void btnRefresh_Click(object sender, EventArgs e)
    {
      ds.Tables[1].Clear();
      ds.Tables[0].Clear();
      ds.Relations.Clear();
      FillTables();
    }
  }
}
несколько строк удаляется, изменяется, но при попытке добавить вторую строку появляется ошибка из-за пустого значения идентификатора. Если я добавляю одну строку и нажимаю Записать-Обновить, то строка добавляется нормально. Если я ввожу несколько строк без нажатия этих кнопок, то при вводе второй строки появляется ошибка неуникальности первичного ключа. Видимо, это связано с неправильным увеличением номера первичного ключа. Но как это исправить - я не знаю. Проект прикрепил.


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

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

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

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


 




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


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

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