2015-04-23 4 views
2

Я пытаюсь разрешить пользователю добавлять категорию (в базу данных). Тем не менее, я не хочу, чтобы были дубликаты категорий.Проверка DB для повторяющихся данных (C#)

Это то, что я до сих пор:

using (var sqlcmd = new SqlCommand("INSERT INTO category_table AS e (Category) VALUES(@cat) WHERE e.Category != @cat;", sqlconnection)) 
{ 
    //code here to add category to DB 
} 

Однако я получаю ошибку:

"SqlException Unhandled: Incorrect syntax near the keyword 'AS'."

+0

Посмотрите на SQL-ограничения –

+0

на свой '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ', Но я согласен с @walther, просто сделаю его уникальной рубрикой. – paqogomez

+0

@paqogomez Can not. Поскольку Категория является столбцом 'varchar'. – John

ответ

2

Просто отметьте столбец как Unique. Не выполняйте работу БД в C#.

+0

А как насчет подкатегорий? У меня есть общие подкатегории между категориями. – John

+2

@John Вы не спрашивали о подкатегориях в своем вопросе. Не расширяйте сферу своего вопроса. – mason

+0

@mason Вы не спрашивали, являются ли Категории «int» или «varchar». Вы не можете сделать его уникальным, если его 'varchar'. – John

0

Вначале ваш синтаксис вставки неверен. Это должно быть

INSERT INTO category_table (Category) values(@cat) 

Также удалите условия, в которых условия. Неправильный синтаксис для вставки.

Так было бы, как

using (var sqlcmd = new SqlCommand("INSERT INTO category_table (Category) values(@cat)", sqlconnection)) 
{ 
    //code here to add category to DB 
} 

Во-вторых вам нужно сделать столбец как unique, для которого вы не хотите дублирования.

+0

Вы не можете сделать столбец 'varchar'' UNIQUE'. – John

+3

@John: - Вы можете определенно сделать это, команда 'ALTER TABLE category_table WITH CHECK ADD CONSTRAINT UQ_category_table_category UNIQUE (Category)' –

+0

Это отрицательно. Я использую SQL Management Studio, и это не позволит мне сделать этот столбец 'UNIQUE'. – John

0

Проблема с вашим sql.

INSERT INTO category_table AS e (Category) VALUES(@cat) WHERE e.Category != @cat;

Вставка не имеет ИНЕК. Кроме того, вы не можете использовать псевдоним таблицы, в которую вы вставляете.

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

Смежные вопросы