2015-02-27 4 views
0

Я пишу код для удаления выбранной строки из базы данных с помощью bindingNavigatorDeleteItem_Click.but, но она не работала. И я тоже не получаю ошибок. Пожалуйста, помогите мне.Модель данных сущности ADO.NET

private void bindingNavigatorDeleteItem_Click(object sender,EventArgs e) 
    { 
     try 
     { 
      int i = nODEDataGridView.Rows.Count; 

      if (MessageBox.Show("Delete?", "Confirm Delete", MessageBoxButtons.OKCancel) == DialogResult.OK) 
       { 

        SqlConnection sc = new SqlConnection("Data Source=.;Initial Catalog=SDHDB;Integrated Security=True"); 
        SqlCommand cmd = new SqlCommand(); 

        cmd.Parameters.AddWithValue("@LINKID", SqlDbType.Int).Value = nODEDataGridView; 
        sc.Open(); 
        cmd.CommandText = "DELETE * FROM NODE WHERE LINKID="; 


        da.Update(ds, "NODE"); 
        cmd.Parameters.AddWithValue("@LINKID", SqlDbType.Int).Value = i; 
        int rows = cmd.ExecuteNonQuery(); 

        sc.Close(); 
        if (rows > 0) 
         MessageBox.Show("Success"); 
        else 
         MessageBox.Show("Failure"); 

        nODEBindingSource.RemoveCurrent(); 
       } 
       else 

        MessageBox.Show("Abort"); 
      } 

     catch 
     { 
     } 
+0

В вашем коде есть так много проблем, плохая структура, в которой вы не располагаете SqlDataAdapter, вы не будете удалять соединение, если происходит Исключение. Ваш первый шаг для исправления кода - это поместить что-то в блок catch, который покажет expcetion. Вы ничего не видите, потому что вы ловите исключение и ничего не делаете с ним. Вот вопрос, в котором я написал уровень доступа к данным: http://stackoverflow.com/questions/25816609/checking-user-name-or-user-email-already-exists/25817145#25817145. Вы должны создать свой код, как это, или что-то вроде этого. – mybirthname

ответ

0

Вы пытаетесь добавить значение параметра перед тем вы определяете текст команды. И вы даже не определили свой параметр в тексте команды.

cmd.CommandText = "DELETE * FROM NODE WHERE LINKID = @LINKID"; 
cmd.Parameters.AddWithValue("@LINKID", SqlDbType.Int).Value = nODEDataGridView; 

Это действительно смущает, что вы пытаетесь удалить строку, которая имеет nODEDataGridView или i как LINKID в вашем коде. И я не вижу в вашем коде da и ds.

В качестве лучшей практики, использовать using заявление распоряжаться вашим SqlConnection, SqlCommand и SqlDataAdapter (если есть) вместо вызова .Close() методы вручную. Также избегайте использовать AddWithValue столько, сколько сможете. It may generate unexpected results sometimes. Используйте метод .Add() и это перегрузки.

В качестве окончательного, пожалуйста, начните читать хорошую книгу об ADO.NET, прежде чем писать больше кода об этом.

+0

поблагодарить u.i последовали за вашими инструкциями. У меня возникла ошибка: Execute Свойство NonQuery-Connection не было инициализировано. –

+0

@jayaJ Это означает, что ваши 'SqlCommand' и' SqlConnection' не связаны. Установите 'cmd.Connection = sc' перед выполнением вашей команды ** или ** создайте свою команду на основе соединения, например' SqlCommand cmd = sc.CreateCommand() '. –

+0

Снова я получил ошибку, подобную этой, - нет сопоставления выходов из типа объекта System.Windows.Forms.DataGridView для известного управляемого типа управляемого поставщика –