Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 Сохранение данных из dataSet в БД  [new]
maestro_skl
Member

Откуда:
Сообщений: 4
Всем, доброго времени суток. Почитал форум, понял, что подобные вопросы составляют чуть-ли не половину. Проблема в следующем: Есть две таблицы связанные отношением "один ко многим". При апдайте insert работает нормально, но вот delete и update работать отказываются. Вот пример кода, может я уже очевидного не вижу. Подскажите кто-нить.
 public static FbDataAdapter CreateServiceAdapter( FbDataAdapter adapter, FbConnection connection)
        {   
            
            //Прописываем InsertCommand
            FbCommand command = new FbCommand("Insert into SERVICE(NAME_SERV,ID_SERV_KEY) " + "Values(?,?)", connection);
            command.Parameters.Add("NAME_SERV", FbDbType.VarChar, 1024, "NAME_SERV");
            command.Parameters.Add("ID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            adapter.InsertCommand = command;
            //Прописываем DeleteCommand
            command = new FbCommand("Delete * from SERVICE Where ID_SERV_KEY = ?", connection);
            FbParameter param = command.Parameters.Add("ID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            param.SourceVersion = DataRowVersion.Original;
            adapter.DeleteCommand = command;
            //Прописываем UpdateCommand
            command = new FbCommand("Update SERVICE set ID_SERV_KEY = @ID_SERV_KEY, NAME_SERV = @NAME_SERV Where ID_SERV_KEY = @oldID_SERV_KEY", connection);
            command.Parameters.Add("@ID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            command.Parameters.Add("@NAME_SERV", FbDbType.VarChar, 1024, "NAME_SERV");
            param = new FbParameter();
            param = command.Parameters.Add("oldID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            param.SourceVersion = DataRowVersion.Original;
            adapter.UpdateCommand = command;
            return adapter;
        }
        public static FbDataAdapter CreateService1Adapter(FbDataAdapter adapter, FbConnection connection)
        {
            FbCommand command = new FbCommand("Insert into SERVICE1(ID_KEY,ID,NAME,PARAMS,FORMATS,RANGE,BIG_LOGO,BUTTON_LOGO,STATE,ID_VPS,ID_SERV_KEY) " + "Values(?,?,?,?,?,?,?,?,?,?,?)", connection);
            command.Parameters.Add("ID_KEY", FbDbType.BigInt,4,"ID_KEY");
            command.Parameters.Add("ID", FbDbType.BigInt, 4, "ID_KEY");
            command.Parameters.Add("NAME", FbDbType.VarChar, 1024, "NAME");
            command.Parameters.Add("PARAMS", FbDbType.VarChar, 1024, "PARAMS");
            command.Parameters.Add("FORMATS", FbDbType.VarChar, 1024, "FORMATS");
            command.Parameters.Add("RANGE", FbDbType.VarChar, 1024, "RANGE");
            command.Parameters.Add("BIG_LOGO", FbDbType.VarChar, 1024, "BIG_LOGO");
            command.Parameters.Add("BUTTON_LOGO", FbDbType.VarChar, 1024, "BUTTON_LOGO");
            command.Parameters.Add("STATE", FbDbType.VarChar, 1024, "STATE");
            command.Parameters.Add("ID_VPS", FbDbType.VarChar, 1024, "ID_VPS");
            command.Parameters.Add("ID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            adapter.InsertCommand = command;
            //Прописываем DeleteCommand
            command = new FbCommand("Delete * from SERVICE1 Where ID_KEY = ?", connection);
            FbParameter param = command.Parameters.Add("ID_KEY", FbDbType.BigInt, 4, "ID_KEY");
            param.SourceVersion = DataRowVersion.Original;
            adapter.DeleteCommand = command;
            //Прописываем UpdateCommand
            command = new FbCommand("Update SERVICE1 set ID_KEY = @ID_KEY, ID = @ID, NAME = @NAME, PARAMS = @PARAMS, FORMATS = @FORMATS, RANGE = @RANGE, BIG_LOGO = @BIG_LOGO, BUTTON_LOGO = @BUTTON_LOGO, STATE = @STATE, ID_VPS = @ID_VPS, ID_SERV_KEY = @ID_SERV_KEY Where ID_KEY = @oldID_KEY", connection);
            command.Parameters.Add("@ID_KEY", FbDbType.BigInt,4,"ID_KEY");
            command.Parameters.Add("@ID", FbDbType.BigInt, 4, "ID");
            command.Parameters.Add("@NAME", FbDbType.VarChar, 1024, "NAME");
            command.Parameters.Add("@PARAMS", FbDbType.VarChar, 1024, "PARAMS");
            command.Parameters.Add("@FORMATS", FbDbType.VarChar, 1024, "FORMATS");
            command.Parameters.Add("@RANGE", FbDbType.VarChar, 1024, "RANGE");
            command.Parameters.Add("@BIG_LOGO", FbDbType.VarChar, 1024, "BIG_LOGO");
            command.Parameters.Add("@BUTTON_LOGO", FbDbType.VarChar, 1024, "BUTTON_LOGO");
            command.Parameters.Add("@STATE", FbDbType.VarChar, 1024, "STATE");
            command.Parameters.Add("@ID_VPS", FbDbType.VarChar, 1024, "ID_VPS");
            command.Parameters.Add("@ID_SERV_KEY", FbDbType.BigInt, 4, "ID_SERV_KEY");
            param = new FbParameter();
            param = command.Parameters.Add("@oldID_KEY", FbDbType.BigInt, 4, "ID_KEY");
            param.SourceVersion = DataRowVersion.Original;
            adapter.UpdateCommand = command;
            return adapter;
        }

 public void BaseUpdate(DataSet DataSet,string TableName)    
        {
            try
            {
                con.Open();
            }
            catch (Exception ex)
            {
                MessageBox.Show("Ошибка загрузки данных в базу\n", ex.ToString());
            }

            DataAdapter = new FbDataAdapter("Select * from "+TableName, con);
           
            if (TableName == "Service")
            {
                CreateServiceAdapter(DataAdapter, con);
            }
            else
            {
                CreateService1Adapter(DataAdapter, con);
            }
            DataAdapter.Fill(DataSet, TableName);
           
            try
            {
               
                DataAdapter.Update(DataSet, TableName);
                //DataSet1.AcceptChanges();
                MessageBox.Show("Данные сохранены", " Сохранение данных", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
            con.Close();
            RemouteVps.Enabled = true;
        }
23 ноя 09, 09:17    [7962339]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение данных из dataSet в БД  [new]
SokolNik
Member [заблокирован]

Откуда:
Сообщений: 91
maestro_skl,

делай такие графы а потом сверху вниз и снизу вверх по сратегии записи

К сообщению приложен файл. Размер - 0Kb
24 ноя 09, 01:48    [7967441]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение данных из dataSet в БД  [new]
maestro_skl
Member

Откуда:
Сообщений: 4
Спасибо, а можно подробнее? Или ссылку?
Я недавно на шарп перешел, до этого под никсы на С++ писал.
Вообще, мне виделось, что я неправильно заполняю DataAdapter.
Сдандартный CommandBuilder здесь не подойдет, т.к. он не работает со связанными таблицами.
24 ноя 09, 07:17    [7967592]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение данных из dataSet в БД  [new]
stimpi
Member

Откуда: Киев, Украина
Сообщений: 662
maestro_skl
Спасибо, а можно подробнее? Или ссылку?
Я недавно на шарп перешел, до этого под никсы на С++ писал.
Вообще, мне виделось, что я неправильно заполняю DataAdapter.
Сдандартный CommandBuilder здесь не подойдет, т.к. он не работает со связанными таблицами.


вам другими словами сказали, что сначала удаляются записи из зависимых таблиц и только потом у справочников, а на апдейте такое возможно если вы ключи обновляете, попробуйте сделать каскадными удаление и апдейт и посмотрите что будет.
24 ноя 09, 10:08    [7968074]     Ответить | Цитировать Сообщить модератору
 Re: Сохранение данных из dataSet в БД  [new]
maestro_skl
Member

Откуда:
Сообщений: 4
Теперь, понял, спасибо.
24 ноя 09, 10:40    [7968395]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить