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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Вставка записи в БД (хороший тон), Как правильно 
V
    Опции темы
Dimass
Дата 1.11.2007, 14:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Похожие темы не раз читал, Прочитал книгу по ADO.Net. И никак не могу понять, может кто пояснит.
Ситуация:
1)Есть SQL Server 2000 с БД в которой одна таблица и в ней два столбца
Один Автоинкриментный ключ (ID) второй текстовый столбец напрмер (Name).
2)Есть простое приложение из одной формы и на ней DataGridView
 
Вопрос:
2) Каким образом оптимально построить работу данного приложения, что бы можно было вносить записи в БД и быть уверенным в том, что другой пользователь не попытается присвоить значение первичного ключа для новой записи одинаковое со мной. т.е оно генерируется самой БД уже при всавке новых записей в БД

 Тут должен бы быть код, но его нет т.к. я не могу понять как его написать. smile Пожалуйста напишите любые соображения как можно этого достигнуть.
 smile 
PM MAIL   Вверх
thomas
Дата 1.11.2007, 17:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Dimass, 
Приветствую.
Цитата

что бы можно было вносить записи в БД и быть уверенным в том, что другой пользователь не попытается присвоить значение первичного ключа для новой записи одинаковое со мной

Пишешь  это, как бы вопрос. И тут же сам отвечаешь
Цитата

оно генерируется самой БД уже при всавке новых записей в БД

Потому как,
Цитата

Автоинкриментный ключ (ID)


А по поводу этого
Цитата

Каким образом оптимально построить работу данного приложения

Применить принцип ООП и, как древние говорили, "разделяй и влавствуй". Т.е. создай три слоя: дата слой, бизнес логика слой и слой презентации.
Первый это все что касается соединения и работы с БД.(класс доступа к БД)
Второй это все что касается обработки данных.(класс(ы) манипуляций с данными)
Третий это все что касается представления данных пользователю. (код самой формы)

К примеру первый класс можно реализовать примерно так http://forum.vingrad.ru/forum/topic-164608.html


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Dimass
Дата 1.11.2007, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо за ссылку!

Я хотел бы уточнить задачу. Все просто, есть DataSet c DataTable заполненной данными. Мы создаем новую запись и присоединяем к таблице. После этого в моей голове пробел. Как переслать данные о вставленных записях.
Код

        public Form1()
        {
            InitializeComponent();
            DataSet ds = new DataSet();
            DataTable dt = new DataTable("Klient");
            DataColumn dc = new DataColumn("ID", typeof(System.Int32));
            dc.AutoIncrement = true;
            dc.AutoIncrementSeed = 1;
            dc.AutoIncrementStep = 1;
            dt.Columns.Add(dc);

            dc = new DataColumn("Name", typeof(System.String));
            dt.Columns.Add(dc);

            ds.Tables.Add(dt);

            dataGridView1.DataSource = ds.Tables["Klient"];



Я предпологаю что нужно создать команду  Insert но как быть с тем, что кто то тоже вставит новую строку со значением первичного ключа которое использовал я. Будет исключение!
Как сделать так, что бы реальный первичный ключ присваивался базой (в моем случае его создает программа) а после обновления его реальное значение возвращалось при повторном выполнении метода Fill() моего DataSet



PM MAIL   Вверх
thomas
Дата 1.11.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доцент... почти
***


Профиль
Группа: Завсегдатай
Сообщений: 1385
Регистрация: 3.10.2006
Где: " Сказочное королевство"

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



Dimass, 
То что ты делаешь в приведенном куске кода в корне не правильно.
Ты создаешь таблицу в ДатаСет программно с "нуля". А надо бы её вызвать из Базы данных с твоего сервера.
Т.е. создать соединение (private SqlConnection dbCon;),  создать датаАдаптер (private SqlDataAdapter dbDa;), создать команду ( private SqlCommand dbCmd;) задать им соответствующие свойства, создать датаСет (private DataSet ds; ds = new DataSet();)
Соединеться с сервером и БД, написать sql-команду(sql = "SELECT * FROM tblMyTable;"; dbCmd.CommandText = sql;) на выборку данных  и выполнив метод Fill датаАдаптера (dbDa.Fill(ds, tabelName);) заполнить таблицу в ДатаСет данными из БД.
А потом когда "юзверь" внесет в эту табличку новые данные выполнить метод Update для датаАдаптера (dbDa.Update(ds.Tables[tabelName]))
И Внесенные им данные будут добавлены в таблицу БазыДанных, где будут сгенерированны ID.
А что бы узнать это ID, да
Цитата

а после обновления его реальное значение возвращалось при повторном выполнении метода Fill() моего DataSet



Это сообщение отредактировал(а) thomas - 1.11.2007, 18:16


--------------------
Крепко жму горло, искренне ваш Thomas. (С)vingrad
Некоторые сорта флоры буквально за одно мгновение превращают нас в фауну!
Проблемы негров шерифа не волнуют.
PM MAIL   Вверх
Dimass
Дата 2.11.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



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

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

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

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


 




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


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

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