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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка на существование данных 
:(
    Опции темы
DenWPF
Дата 2.11.2009, 21:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



Как при добавление кодом строки делать проверку на существование такого элемента?
к примеру генерируется у меня в программе случайное число и если такое уже есть то генерировалось ещё одно и записывалось.


поробывал я через тру катч...но во если ошибка вылетает не на повторение, то получается веченый цикл.Код

Код

bool a = true;
            while (a)
            {
                try
                {
                    int k = rand.Next(100, 120);
                    OleDbCommand command = new OleDbCommand("INSERT INTO " + tableName + " (nick, [sum], [keycode]) " +
                    "VALUES ('" + nick.Text.ToString() + "', " + sum.Text.ToString() + "," + k + ")", Conn);

                    command.ExecuteNonQuery();

                    a = false;
                }
                catch (Exception ee)
                {
                    MessageBox.Show("Ошибка!!! " + ee.Message);
                }
            }

PM MAIL   Вверх
Akina
Дата 2.11.2009, 22:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Цитата(DenWPF @  2.11.2009,  22:33 Найти цитируемый пост)
Как при добавление кодом строки делать проверку на существование такого элемента?

Сначала запрашивать выборку по указанному критерию. Если возвращён непустой набор данных - значит, запись с таким критерием уже есть.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DenWPF
Дата 2.11.2009, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



этот эмм...ужасный способ сам делал...или это приемлемо?
Код

 DataSet ds2 = new DataSet();
            OleDbDataAdapter adapter2 = new OleDbDataAdapter("Select * from " + tableName+" WHERE nick LIKE '"+ nick.Text.ToString() +"'", Conn);
            adapter2.Fill(ds2);
if (ds2.Tables[0].Rows.Count == 0)

PM MAIL   Вверх
Akina
Дата 3.11.2009, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



DenWPF, ты полностью сам виноват в том, что получается "ужастик". Незачем было бизнес-логику вытаскивать на клиента.



--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
DenWPF
Дата 3.11.2009, 09:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



 smile  а обьяснить?
ну не понимаю я.
PM MAIL   Вверх
Akina
Дата 3.11.2009, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


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

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



Средства SQL-сервера позволяют реализовывать весьма сложную логику обработки данных.
В твоём случае SQL-сервер сам может по запросу генерировать случайное число, проверять наличие такого в таблице, при наличии перегенерировать, пока не получит новое, заносить данные в таблицу и возвращать последнее сгенерированное число. Делается это триггером, пользовательской функцией или хранимой процедурой. А приложение (клиент) просто даёт команду на выполнение запроса и ждёт результата. И не клиента это дело знать, КАК получено случайное число, и сколько времени сервер вкалывал, чтобы его получить.
Иными словами - почитайте хотя бы основы SQL. Скажем вот тут.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
bopoha
Дата 3.11.2009, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

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



DenWPF, также есть специальный тип полей - автоинкрементные, которые могут работать в двух режимах: наращивать +1 каждое новое значение или формировать значение рандомно.
PM MAIL WWW ICQ Skype GTalk   Вверх
DenWPF
Дата 3.11.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1659
Регистрация: 26.9.2009

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



Цитата(bopoha @ 3.11.2009,  12:32)
DenWPF, также есть специальный тип полей - автоинкрементные, которые могут работать в двух режимах: наращивать +1 каждое новое значение или формировать значение рандомно.

ну это счетчик, но у меня должно быть последовательный счетчик, а в двоем они не дружат.

Akina, я это прекрасно понимаю по этому и тут и спрашиваю как, кодом я мог и без этого форума.
ок почитаю
PM MAIL   Вверх
bopoha
Дата 3.11.2009, 13:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1283
Регистрация: 10.5.2006
Где: Беларусь, Минск

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



Вот запрос который выполниться без ошибки:
Код

INSERT INTO table (random_col)
SELECT 1231231231 as random_col_new
FROM one_row
WHERE EXISTS (SELECT random_col FROM table WHERE random_col = 1231231231) = False


one_row - таблица, которая хранит одну запись.

Теперь запрос выполниться без ошибки. Добавилась ли запись можно определить по атрибуту RecordAffected.
PM MAIL WWW ICQ Skype GTalk   Вверх
advantiss1
Дата 18.12.2009, 00:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(DenWPF @  2.11.2009,  21:33 Найти цитируемый пост)
поробывал я через тру катч...но во если ошибка вылетает не на повторение, то получается веченый цикл.Код

Может стоит проверять код ошибки ErrorCode в catch блоке чтоб не обрабатывать другие иксепшены? Думаю этого достаточно будет для решения проблемы.


PM MAIL   Вверх
advantiss1
Дата 18.12.2009, 10:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Akina @  3.11.2009,  09:18 Найти цитируемый пост)
Средства SQL-сервера позволяют реализовывать весьма сложную логику обработки данных.

Смешение бизнеслогики со слоем данных уже морально устарело, модные тенденции архитектуры предлагают разделять приложение на данные, логику и представление.
Чем больше ты свяжешь логику(твой код) с форматом хранения данных (SQL), тем менее гибкой становится разработанная тобой система. К примеру если ты вдруг надумаешь мигрировать на другую SQL СУБД, или вообще перейти на другой формат хранения данных(XML или BigTable), то тебе прийдется полностью переписывать и бизнес слой, поскольку среда хранения данных не сможет обеспечить функционал предыдущей использованной.
Возможность перехода на другой движок БД можно считать очень вероятной... опыт показывает, что желание сменить двиг может появиться очень скоро, а переписывать изза этото все практически с нуля - радужная перспектива...
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
stab
mr.DUDA
Exception

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

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

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


 




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


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

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