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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как правильно добавлять данные в связанные таблицы, .Net и DataGrid 
:(
    Опции темы
qweasd
Дата 2.3.2009, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте!

Создал 4 таблицы, с помощью внешних ключей связал записи таблиц таким образом(блок схема БД на прикрепленной картинке):
Код


    mytestdb.fullname
    INNER JOIN mytestdb.firstname 
        ON (fullname.NameID = firstname.id)
    INNER JOIN mytestdb.lastname 
        ON (fullname.LastnameID = lastname.id)
    INNER JOIN mytestdb.secondname 
        ON (fullname.SecondnameID = secondname.id);



Таким образом, формирую таблицу, которую хочу отображать на экране:

Код

DELIMITER $$

DROP PROCEDURE IF EXISTS `mytestdb`.`prFullname`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `prFullname`()
BEGIN
  SELECT
    lastname.Lastname
    , firstname.Name
    , secondname.Secondname
  FROM
    mytestdb.fullname
    INNER JOIN mytestdb.firstname 
        ON (fullname.NameID = firstname.id)
    INNER JOIN mytestdb.lastname 
        ON (fullname.LastnameID = lastname.id)
    INNER JOIN mytestdb.secondname 
        ON (fullname.SecondnameID = secondname.id);
END$$

DELIMITER ;



Код

        public MainForm()
        {
            InitializeComponent();
            
            MyDataSet = new DataSet();
            MyConn = new MySqlConnection("Database=mytestdb;Data Source=localhost;User Id=root;Password=admin");
            
            try{
                MyConn.Open();
            }
            catch(System.Exception e)
            {
                MessageBox.Show(e.Message.ToString());
            }
            if (MyConn.State == ConnectionState.Open)
            {
                MyAdapter = new MySqlDataAdapter("CALL prFullname", MyConn);
                cb = new MySqlCommandBuilder(MyAdapter);
                MyAdapter.Fill(MyDataSet, "fullname");
                MyDataGrid.DataSource = MyDataSet;
                MyDataGrid.DataMember = "fullname";
            }
        }
        
        void Button1Click(object sender, EventArgs e)
        {
            MyAdapter.Update(MyDataSet, "fullname");
        }



При добавлении данных в DataGrid и попытке MyAdapter.Update(MyDataSet, "fullname"); выдает ошибку.
Вопрос: как правильно добавлять введенные данные в таблицы???
Использую БД MySQL!


Это сообщение отредактировал(а) qweasd - 3.3.2009, 16:01

Присоединённый файл ( Кол-во скачиваний: 13 )
Присоединённый файл  _____________.JPG 14,74 Kb
PM MAIL   Вверх
LSD
Дата 2.3.2009, 16:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(qweasd @  2.3.2009,  13:58 Найти цитируемый пост)
Создал 4 таблицы, одна из них связывает 3 таблицы

Для начала разберись с терминологией. Таблицы ничего не связывают. Может быть речь идёт о view?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
qweasd
Дата 4.3.2009, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Вообщем сделал в хранимой процедуре вот так:

Код

CREATE DEFINER=`root`@`localhost` PROCEDURE `prAddFullName`(IN inLastname varchar(20),
                                            IN inFirstname varchar(20),
                                            IN inSecondname varchar(20))
BEGIN
  INSERT INTO
    lastname(Lastname)
  VALUES
    (inLastname);
  INSERT INTO
    firstname(Name)
  VALUES
    (inFirstname);
  INSERT INTO
    secondname(Secondname)
  VALUES
    (inSecondname);

  INSERT INTO
    fullname(LastnameID,NameID,SecondnameID)
  SELECT
    lastname.id,firstname.id,secondname.id
  FROM
    lastname,firstname,secondname
  WHERE
    Lastname = inLastname
     AND Name = inFirstname
     AND Secondname = inSecondname;
END


Знаю что коряво! Подскажите как правильно?
И вот косяк вылазит- если поля Lastname, Name или Secondname сделать уникальными может вызваться ексепшн Duplicated - как быть в таком случае?? Есть ли какой-то аналог блоков try{}catch{} в SQL?


Это сообщение отредактировал(а) qweasd - 4.3.2009, 20:31
PM MAIL   Вверх
qweasd
Дата 6.3.2009, 10:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Чтобы избавится от сообщения о дублирование надо использовать  INSERT IGNORE вместо простого INSERT.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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