2015-09-12 3 views
1

Я пытаюсь удалить запись базы данных Access с помощью OleDbCommand класса Connected архитектурыУдалить и обновление запросы не работают в ADO.NET

using System.Data.OleDb; 
using System.Data; 

protected void Button2_Click(object sender, EventArgs e) 
     { 
     String x = "Connection String..."; 
     OleDbConnection con = new OleDbConnection(x); 
     con.Open(); 


     String query = "Delete FROM TB WHERE [email protected]"; 
     OleDbCommand cmd = new OleDbCommand(query, con); 
     cmd.Parameters.AddWithValue("@number", TextBox2.Text); 


     int res = cmd.ExecuteNonQuery(); 
     if (res > 0) 
     { 
      Label.Text = "Deleted successfully"; 
     } 
     else 
     { 
      Label.Text = "Not Deleted"; 
     } 

     con.Close(); 
    } 

Каждый раз, когда я пытаюсь удалить запись Else Выполнено условие, которое НЕ УДАЛЕНО.

Такая же проблема с UPDATE запроса

protected void Button3_Click(object sender, EventArgs e) 
    { 

     String x = "Connection String.."; 
     OleDbConnection con = new OleDbConnection(x); 
     con.Open(); 


     String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO"; 
     OleDbCommand cmd = new OleDbCommand(query, con); 

     int res = cmd.ExecuteNonQuery(); 
     if (res > 0) 
     { 
      Label.Text = "Updated successfully"; 
     } 
     else 
     { 
      Label.Text = "Not Updated"; 
     } 
     con.Close(); 
    } 

ВСТАВИТЬ запрос отлично работает. Где я делаю неправильно?

+0

convert TextBox2.Text to int – Arash

+2

Вы должны [никогда не использовать] (http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/) 'AddWithValue' – DavidG

ответ

2

Предисловие: Я ничего не знаю о ASP.NET, но я знаю, MS Access. И NO - это reserved word. Следовательно, если используются зарезервированные слова, это может привести к неожиданным ответам или ошибкам, если они указаны как поля.

Чтобы устранить проблему, рассмотрите вопрос о том, как скопировать столбец NO в запросы на удаление и обновление.

String query = "DELETE FROM TB WHERE [NO] = @number" 

String query = "UPDATE TB SET NM = @name WHERE [NO] = @TextBox_NO" 

Я могу подтвердить это решение, как я только что испытал NO против [NO] ссылку на столбец в запросе SQL в MS Access 2013.Первые возвратили нулевые записи, но последний вернул правильные записи.

1

Если он не удаляет записи, значит int res = cmd.ExecuteNonQuery(); возвращает 0 или не удаляет записи. Убедитесь, что условие в вашем WHERE статье WHERE [email protected] соответствует любой записи. Чтобы проверить, запустить отборное вдоль линии с тем же условием

SELECT 1 FROM TB WHERE [email protected] 

Кроме того, попробуйте обрезки данные TextBox перед штамповкой в ​​качестве параметра, как

cmd.Parameters.AddWithValue("@number", TextBox2.Text.Trim()); 

Если NO имеет тип INT то тайному его в целое, прежде чем передавая в качестве параметра, как

cmd.Parameters.AddWithValue("@number", Convert.ToInt32(TextBox2.Text.Trim())); 

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

String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO"; 
    OleDbCommand cmd = new OleDbCommand(query, con); 
+1

И не используйте AddWithValue! – DavidG

+0

Хмм, нисходящий голос на кажущийся действительный ответ без комментариев. Это странно!!! – Rahul

+0

@ Rahul вы можете объяснить, как отделка изменит ситуацию? – Palak

2

я думаю, что есть какие-либо datatypeconversion error, поэтому это не удаление, а также для случая обновления вы просто пропустили параметр, чтобы передать @name,@TextBox_No

Смотрите здесь Зачем использовать Add()

Вам необходимо изменить способ передачи параметров AddedWithValue() на Add()

Удалить:

String query = "Delete FROM TB WHERE [email protected]"; 
     OleDbCommand cmd = new OleDbCommand(query, con); 
     cmd.Parameters.Add("@number", OleDbType.Numeric, 30).Value=TextBox2.Text; 

     int res = cmd.ExecuteNonQuery(); 
     if (res > 0) 
     { 
      Label.Text = "Deleted successfully"; 
     } 
     else 
     { 
      Label.Text = "Not Deleted"; 
     } 

     con.Close(); 

and for Update u missed the parameter to pass:

String x = "Connection String.."; 
     OleDbConnection con = new OleDbConnection(x); 
     con.Open(); 


     String query = "UPDATE TB SET NM = @name WHERE NO = @TextBox_NO"; 
     OleDbCommand cmd = new OleDbCommand(query, con); 
     cmd.Parameters.Add("@name ", OleDbType.VarChar, 200).Value=your_Name_Variable;// 

     cmd.Parameters.Add("@TextBox_NO", OleDbType.Numeric, 30).Value=Your_No_Variable; 

     int res = cmd.ExecuteNonQuery(); 
     if (res > 0) 
     { 
      Label.Text = "Updated successfully"; 
     } 
     else 
     { 
      Label.Text = "Not Updated"; 
     } 
     con.Close(); 
+1

Ошибка: cmd.Parameters.Add ("@ number", OleDbType.Numeric, 30) = TextBox2.Text; Левая часть задания должна быть переменной, свойством или индексом. – Palak

+1

Попробуйте, 'cmd.Parameters.Add (« @ number », OleDbType.Numeric, 30) .Value = TextBox2.Text;' @Palak –

+0

Ваш ответ дал несколько хороших моментов, но я не получаю желаемого результата. – Palak

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