В тестовом проекте: Код | 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
|