2015-12-18 6 views
2

У меня есть приложение Asp.net на моей странице, которое пользователь запрашивает для удаления пользователя. Затем он заполняет db «Admin_TaskList».Заявление об обновлении SQL Asp.Net

Администратор затем входит в защищенную зону сайта и вводит имя пользователя и нажимает кнопку. После подтверждения пользователь затем удаляется из моего db «Пользователи» (уже получил это действие), но я хочу, чтобы мой столбец «Admin_TaskList» db «Status» изменился с «To Do» на «Completed».

Как мне грустно, у меня есть бит для удаления, но я борюсь за обновление моей другой таблицы.

Отрывок кода я попытался

conn.Open(); 
SqlCommand cmd2 = new SqlCommand("UPDATE FROM Admin_TaskList SET Status = 'Complete' WHERE Description = 'Remove User' AND Name = @Name", conn); 
cmd2.Parameters.AddWithValue("@Name", txtRemoveUser.Text); 
SqlDataReader rd2 = cmd2.ExecuteReader(); 
conn.Close(); 

Полный код

public void btnRemoveConfirmYes_Click(object sender, EventArgs e) 
     { 
      string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString; 
      SqlConnection conn = new SqlConnection(connection); 

      conn.Open(); 
      SqlCommand cmd1 = new SqlCommand("DELETE FROM Users WHERE Name = @Name", conn); 
      cmd1.Parameters.AddWithValue("@Name", txtRemoveUser.Text); 
      SqlDataReader rd1 = cmd1.ExecuteReader(); 
      conn.Close(); 

      conn.Open(); 
      SqlCommand cmd2 = new SqlCommand("UPDATE FROM Admin_TaskList SET Status = 'Complete' WHERE Description = 'Remove User' AND Name = @Name", conn); 
      cmd2.Parameters.AddWithValue("@Name", txtRemoveUser.Text); 
      SqlDataReader rd2 = cmd2.ExecuteReader(); 
      conn.Close(); 

      txtRemoveUser.Text = ""; 
      Response.Redirect("/AdminSide/TaskList.aspx"); 
     } 
+0

Вам не нужно, чтобы закрыть и повторно открыть соединение между командами. – Dai

+0

Лучше написать _Stored Proc_ и выполнить обе операции, то есть обновить и удалить в этом. –

+0

@RahulSingh Вам не нужен sproc, вы можете отправить командную команду в одном исполнении 'SqlCommand'. – Dai

ответ

3

Вместо использования SqlDataReader для обновления использовать значение SqlCommand.ExecuteNonQuery:

int updated = cmd2.ExecuteNonQuery(); 

Помните, что вам необходимо использовать ExecuteNonQuery для команд, которые изменяют ваши данные, такие как Delete, Insert или Update.

MSDN:

Вы можете использовать ExecuteNonQuery для выполнения каталога операций (для например, запрашивая структуру базы данных или создание базы данных объектов, таких как таблицы), или изменить данные в базе данных без , используя DataSet, выполняя инструкции UPDATE, INSERT или DELETE.

Полный метод:

int deleted, updated; 
string connection = ConfigurationManager.ConnectionStrings["PaydayLunchConnectionString1"].ConnectionString; 

using (var conn = new SqlConnection(connection)) 
{ 
    conn.Open(); 
    string delSql = "DELETE FROM Users WHERE Name = @Name"; 
    using (var cmd = new SqlCommand(delSql, conn)) 
    { 
     cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = txtRemoveUser.Text; 
     deleted = cmd.ExecuteNonQuery(); 
    } 

    string updSql = @"UPDATE Admin_TaskList 
         SET Status = 'Complete' 
         WHERE Description = 'Remove User' 
         AND Name = @Name"; 
    using (var cmd = new SqlCommand(updSql, conn)) 
    { 
     cmd.Parameters.Add("@Name", SqlDbType.NVarChar).Value = txtRemoveUser.Text; 
     updated = cmd.ExecuteNonQuery(); 
    } 
} 
+0

Я изо всех сил пытаюсь понять, как это реализовать. Я только делаю разработку для 3wks, поэтому, пожалуйста, несите меня. Не могли бы вы предоставить то, что вы имеете в виду. – murday1983

+0

@ murday1983: посмотрите –

+0

Спасибо, но я получаю следующую ошибку сервера: «ExecuteNonQuery: свойство Connection не было инициализировано». для 'updated = cmd1.ExecuteNonQuery();' строка – murday1983

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