2016-04-15 5 views
0

Я пытаюсь что-то сделать, но не могу понять это. Так что я пытаюсь, что если пользователь вводит что-то внутри txtISN и уже существует внутри базы данных, запись не будет вставлена. Я также хочу, чтобы сообщение об ошибке появилось, когда запись не была вставлена, и когда вставлена ​​запись, я хочу, чтобы появилось сообщение о том, что запись была вставлена ​​успешно.Если запись существует, не вставляйте

Спасибо за помощь y'all!

string _connStr = @"Data Source = EJQ7FRN; Initial Catalog = BES; Integrated Security = True"; 
       string _query = "INSERT INTO [BES_S] (ISN,Titel,Name) values (@ISN,@Titel,@Name)"; 
       using (SqlConnection conn = new SqlConnection(_connStr)) 
       { 
        using (SqlCommand comm = new SqlCommand()) 
        { 
         comm.Connection = conn; 
         comm.CommandType = CommandType.Text; 
         comm.CommandText = _query; 
         comm.Parameters.AddWithValue("@ISN", txtISN.Text); 
         comm.Parameters.AddWithValue("@Titel",txtTitel.Text); 
         comm.Parameters.AddWithValue("@Name", txtName.Text); 
         try 
         { 
          conn.Open(); 
          comm.ExecuteNonQuery(); 
         } 
         catch (SqlException ex) 
         { 

         } 
        } 
       } 
+1

У вас есть первичный ключ на этом столе? – Steve

+0

Сначала вам нужно запросить базу данных (оператор Select), чтобы определить, есть ли какие-либо данные перед вставкой. – jdweng

+0

Можете ли вы объяснить, почему вы используете тег MySql, в то время как ваш код использует классы для Sql Server? Пожалуйста, будьте осторожны при использовании тегов ... – Steve

ответ

1

Вы должны изменить ваш запрос немного, но вы можете использовать ключевое слово DUAL MySql, чтобы сделать это:

string _connStr = @"Data Source = EJQ7FRN; Initial Catalog = BES; Integrated Security = True"; 
string _query = "INSERT INTO [BES_S] (ISN,Titel,Name) "; 
_query = _query + " SELECT @ISN, @Titel, @Name FROM DUAL"; 
_query = _query + " WHERE NOT EXISTS (SELECT ISN WHERE [email protected])"; 

using (SqlConnection conn = new SqlConnection(_connStr)) 
{ 
    using (SqlCommand comm = new SqlCommand()) 
    { 
     comm.Connection = conn; 
     comm.CommandType = CommandType.Text; 
     comm.CommandText = _query; 
     comm.Parameters.AddWithValue("@ISN", txtISN.Text); 
     comm.Parameters.AddWithValue("@Titel",txtTitel.Text); 
     comm.Parameters.AddWithValue("@Name", txtName.Text); 
     try 
     { 
      conn.Open(); 
      comm.ExecuteNonQuery(); 
     } 
     catch (SqlException ex) 
     { 

     } 
    } 
} 

DUAL, как фиктивные таблицы, которую можно использовать для SELECT с.

+0

Кажется, что вы следовали моей ошибке. Теги для MySql-кода для Sql-сервера – Steve

+0

Это работает. Спасибо! Еще одна вещь, как, как отобразить сообщение об ошибке, когда запись не вставлена? –

+0

@FranciscoIvens - Существует несколько способов. После того, как вы сделаете свою вставку, сделайте 'SELECT ROW_COUNT();'. Если его '0', то вы знаете, что это был дубликат. Из кода, который вы предоставили, сложно определить. Это WebForms или MVC? – Icemanind

0

Пусть база данных позаботятся об этом с помощью уникального ограничения/индекса:

alter table bes_s add constraint unq_bes_ISN unique (ISN); 

Это приведет к базе данных, чтобы сгенерировать ошибку, если дубликат ISN вставлен. Вы можете поместить один или несколько столбцов для уникального ограничения (если этот единственный столбец не является точным определением уникальности).

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