Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Сохранение связанных таблиц в БД


Автор: alexprogramer 23.10.2011, 22:33
Всем привет,

Пролистал вопросы по БД, но так и не смог найти ответа на свой.

Проблема такая:

Есть 3 связанные таблицы. Все они выводятся на форму и редактируются (через datagrid-ы). Надо сохранить все вносимые изменения.
БД локальная MySQL создана в конструкторе. Пишу в C# 2010

Код которым пытаюсь все это сделать следующий:

Код

            this.Validate();
            
            this.brokersBindingSource.EndEdit();                   //1
            this.trading_TerminalBindingSource.EndEdit();     //2
            this.clientsBindingSource.EndEdit();                     //3            

            this.tableAdapterManager.UpdateAll(this.DB_DataSet);


Изменения сохраняются только в самой первой таблице (brokers), а в остальных (1-я связанна со 2-й как 1 ко многим, 2-я связана с 3-й как один ко многим) ничего не происходит. 

Подскажите пож в чем может быть проблема и как решить. Уже несколько дней безрезультатно бьюсь (:

Автор: alexprogramer 24.10.2011, 21:11
Решение нашел сам к сожалению никто не помог.

Оказывается когда создаешь связь между таблицами ее обязательно надо создавать в обозревателе баз данных

Если в конструкторе позже пытаться это делать то почему то изменения не приносят должного результата.

Если у кого то похожая проблема, то откройте базу northwind и в таблицах посмотрите как сделаны связи, в ней все работает.  

Автор: deniskostin 15.11.2011, 14:35
у меня проблема немного другого характера.

 имеется dataset  и 2 таблицы в нем.

происходит загрузка 2 таблиц из MS Access, связка , редактирование. но при попытке сохранить изменения вылетает ошибка "для обеспечения целостности данных необходима связная запись в таблице N_PODR"

Код

public DataSet ds = new System.Data.DataSet();

/* LOAD DATA FROM PODRAZDELENIYA */
            
            string query = @"SELECT * FROM PODR_TBL ORDER BY id";
            this.Podrazd_Adapter = new OleDbDataAdapter(query,conn);
            this.Podrazd_Adapter.Fill(ds,"PODR_TBL");
            
            this.Podrazd_CommandBuilder = new OleDbCommandBuilder(Podrazd_Adapter);
            this.Podrazd_CommandBuilder.GetUpdateCommand();
            this.Podrazd_CommandBuilder.GetDeleteCommand();
            this.Podrazd_CommandBuilder.GetInsertCommand();
            
            ds.Tables["PODR_TBL"].Columns["id"].AutoIncrement = true;
            ds.Tables["PODR_TBL"].Columns["id"].AutoIncrementStep = 1;
            ds.Tables["PODR_TBL"].Columns["id"].Unique = true;
            ds.Tables["PODR_TBL"].PrimaryKey = new DataColumn[]{ds.Tables["PODR_TBL"].Columns["id"]};
            
            /* * * * * * * * * * * * * * * * * *
             * 
             * LOAD DATA FROM SPISOK LICHNOGO SOSTAVA
             *  
             * * * * * * * * * * * * * * * * * */
            
            query = @"SELECT id, n_podr, dolzh, mesto_nah, zvanie, familie, imya, otchestvo, adress, phone, n_mar, prib, obyz_vrprib, date_prib, vrem_prib, Opozd, [zvanie]+' '+[familie] as test FROM SPISLS_TBL";
            LSostav_Adapter = new OleDbDataAdapter(query,conn);
            LSostav_Adapter.Fill(ds,"SPISLS_TBL");
            string update = @"UPDATE SPISLS_TBL SET n_podr=?, dolzh=?, mesto_nah=?, zvanie=?,"+
                            @" familie=?, imya=?, otchestvo=?, adress=?, phone=?, n_mar=?,"+
                            @" prib=?, obyz_vrprib=?, date_prib=?, vrem_prib=?,"+
                            @" Opozd=? WHERE id=?";
            
            OleDbCommand upcom = new OleDbCommand(update);
            
            upcom.Parameters.Add("n_podr",OleDbType.Integer,10,"n_podr");
            upcom.Parameters.Add("dolzh",OleDbType.VarChar,100,"dolzh");
            upcom.Parameters.Add("mesto_nah",OleDbType.VarChar,100,"mesto_nah");
            upcom.Parameters.Add("zvanie",OleDbType.VarChar,100,"zvanie");
            upcom.Parameters.Add("familie",OleDbType.VarChar,100,"familie");
            upcom.Parameters.Add("imya",OleDbType.VarChar,100,"imya");
            upcom.Parameters.Add("otchestvo",OleDbType.VarChar,100,"otchestvo");
            upcom.Parameters.Add("adress",OleDbType.VarChar,100,"adress");
            upcom.Parameters.Add("phone",OleDbType.VarChar,100,"phone");
            upcom.Parameters.Add("n_mar",OleDbType.VarChar,100,"n_mar");
            upcom.Parameters.Add("prib",OleDbType.VarChar,100,"prib");
            upcom.Parameters.Add("obyz_vrprib",OleDbType.VarChar,100,"obyz_vrprib");
            upcom.Parameters.Add("date_prib",OleDbType.VarChar,100,"date_prib");
            upcom.Parameters.Add("vrem_prib",OleDbType.VarChar,100,"vrem_prib");
            upcom.Parameters.Add("Opozd",OleDbType.VarChar,100,"Opozd");
            upcom.Parameters.Add("id",OleDbType.Integer,10,"id");
            
            LSostav_Adapter.UpdateCommand = upcom;
            
            LSostav_CB = new OleDbCommandBuilder(LSostav_Adapter);
            LSostav_CB.GetDeleteCommand();
            LSostav_CB.GetInsertCommand();
            
            ds.Tables["SPISLS_TBL"].Columns["id"].AutoIncrement = true;
            ds.Tables["SPISLS_TBL"].Columns["id"].AutoIncrementStep = 1;
            ds.Tables["SPISLS_TBL"].Columns["id"].Unique = true;
            ds.Tables["SPISLS_TBL"].PrimaryKey = new DataColumn[]{ds.Tables["SPISLS_TBL"].Columns["id"]};
            
            
            
            ds.Relations.Add("podrazd",ds.Tables["PODR_TBL"].Columns["id"],ds.Tables["SPISLS_TBL"].Columns["n_podr"]);


Podrazd_Adapter.Update(ds,"PODR_TBL");
LSostav_Adapter.Update(ds,"SPISLS_TBL");



Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)