2016-10-03 1 views
0

Я решил закодировать программу контактов, которая будет подключаться к SQL-серверу. Почти я доработал код и программа работает хорошо. Но у меня есть проблема. Когда пользователь хочет удалить контакт из этой программы, ему необходимо ввести фамилию контакта, которую он хочет удалить, а затем нажать кнопку «Удалить» в форме. Хорошо, что этот способ не очень хорош, потому что возможно, что были, например, 5 парней с тем же именем. Я решил добавить поле на SQL-сервере под именем Code. Этот код уникален для каждого контакта. Но у меня есть проблема. как я должен программировать код, чтобы всякий раз, когда пользователь вводил информацию о контакте и нажимал кнопку «Сохранить», этот уникальный код автоматически добавляется в поле «Код» на SQL-сервере? здесь мои коды вы можете увидеть:Установить код на SQL-сервер и показать в DataGridView

namespace Contact 
{ 
    class Operation 
    { 
     SqlConnection cn; 
     public Operation() 
     { 
      cn = new SqlConnection(Connection.Server); 
     } 

     public DataTable Show() 
     { 
      SqlCommand cmd = new SqlCommand("select * from tblContact ", cn); 
      SqlDataAdapter da = new SqlDataAdapter(cmd.CommandText, cn); 
      DataTable dt = new DataTable(); 
      da.Fill(dt); 

      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 

      return dt; 
     } 

     public void Add(string Name , string FamilyName , string Work , string Fax , string Phone , string Home) 
     { 
      SqlCommand cmd = new SqlCommand("insert into tblContact(Name,FamilyName,Work,Fax,Phone,Home) values ('" + Name + "' , '" + FamilyName + "' , '" + Work + "' , '" + Fax + "' , '" + Phone + "' , '" + Home + "')", cn); 

      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
     } 
     public void Delete(string FamilyName) 
     { 
      SqlCommand cmd = new SqlCommand("delete from tblContact where FamilyName = '" + FamilyName + "'", cn); 

      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
     } 

     public void Update (string Name , string FamilyName , string Work , string Fax , string Phone , string Home) 
     { 
      SqlCommand cmd = new SqlCommand("update tblContact set FamilyName = '" + FamilyName + "' ,Work = '" + Work + "' , Fax = '" + Fax + "' , Name = '" + Name + "' , Home = '" + Home + "' where Phone = '" + Phone + "'",cn); 

      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      cn.Close(); 
     } 
    } 
} 
+1

поиск о [IDENTITY столбцов] (https://msdn.microsoft.com/en-us/library/ms186775.aspx? е = 255 & MSPPError = -2147217396). И после этого посмотрите, как написать параметризованный запрос. Ваш код является бесплатным пропуском для каждого хакера – Steve

+0

, если вы разрешаете пользователю выбирать из DataGridView, а затем отбирать все столбцы, которые вам нужно, скрывать поле ключа Identity в DataGridView и когда пользователь выбирает строку .. тогда вы делаете 'foreach (строка DataGridViewRow в вашемDataGridView.SelectedRows)', тогда вы можете захватить KeyId, например, и удалить из таблицы, где KeyId = Selected KeyId из 'row.Cells [0] .Value' – MethodMan

+0

Вам нужно прочитать, понять и начать использовать параметризованные запросы немедленно. Это широко открыта для SQL-инъекции. И вам действительно следует избегать использования select *, если оно не находится внутри EXISTS –

ответ

0

Для имеющих уникальный столбец в таблице, лучший способ создать столбец (именованный ID для exmaple) с int типа или bigint и установите Identity свойство правда. В этом случае у вас есть столбец, значение которого начинается с 1 и автоматически увеличивается для каждой новой строки. Вы также можете установить этот столбец для первичного ключа, поскольку он уникален и не равен нулю.

Тогда для цели удаления вы можете использовать только этот столбец.

DELETE FROM tblContact WHERE ID = (Your Parameter) 

Просто установите параметр.

Сначала вы должны удалить строку на основе фамилии или любого другого столбца, затем получить значение ID из этой строки и вызвать delete для этой строки.

Лучший способ для этого состоит в том, что вы показываете список контактов пользователю (например, в сетке и скрываете столбец идентификатора), и пользователь выбирает строку для удаления. В то время у вас есть идентификатор из этой строки и передать в эту функцию:

public void Delete(int ID) 
{ 
    SqlCommand cmd = new SqlCommand("delete from tblContact where ID = " + ID + "'", cn); 

    cn.Open(); 
    cmd.ExecuteNonQuery(); 
    cn.Close(); 
} 
Смежные вопросы