【问题标题】:Asp.Net SQL Update StatementAsp.Net SQL 更新语句
【发布时间】:2016-03-25 06:32:56
【问题描述】:

我的页面上有一个Asp.net 应用程序,用户请求删除用户。然后这会填充我的“Admin_TaskList”数据库。

然后管理员进入站点的安全区域并输入用户名并单击按钮。确认后,该用户将从我的“用户”数据库中删除(已经开始工作),但我希望我的“Admin_TaskList”数据库“状态”列从“待办事项”更改为“已完成”。

我很伤心,我的删除位正在工作,但我正在努力更新我的另一个表。

我尝试过的代码片段

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");
        }

【问题讨论】:

  • 你不需要关闭和重新打开命令之间的连接。
  • 最好写一个 Stored Proc 并同时执行这两个操作,即更新和删除。
  • @RahulSingh 您不需要存储过程,您可以在单个 SqlCommand 执行中发送命令批处理。
  • 为什么你在DELETEUPDATE 语句中使用ExecuteReader 而不是ExecuteNonQuery?这没有意义。
  • 另外,请使用 ExecuteNonQuery 而不是 ExecuteReader,因为您没有任何 SELECT 语句。

标签: c# asp.net sql-server webforms


【解决方案1】:

不要使用SqlDataReader 来更新值,而是使用SqlCommand.ExecuteNonQuery

int updated = cmd2.ExecuteNonQuery();

请记住,您需要在修改数据的命令上使用ExecuteNonQuery,例如DeleteInsertUpdate

MSDN:

您可以使用 ExecuteNonQuery 来执行目录操作(例如 例如,查询数据库的结构或创建数据库 对象(例如表),或更改数据库中的数据,而无需 通过执行 UPDATE、INSERT 或 DELETE 语句来使用 DataSet。

完整的方法:

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();
    }
}

【讨论】:

  • 我在努力理解如何实现这一点。我只做了 3 周的开发,所以请多多包涵。你能提供你的意思吗
  • @murday1983:看看
  • 谢谢,但我收到以下服务器错误“ExecuteNonQuery:连接属性尚未初始化。”对于updated = cmd1.ExecuteNonQuery();
  • @murday1983:更新了我的答案,忘记将连接添加到SqlCommand的构造函数(第二个更新)。我也将UPDATE FROM Admin_TaskList 更改为UPDATE Admin_TaskList
  • 谢谢。我确实注意到了这一点并添加了它,但是当我这样做时,我收到错误“关键字'FROM'附近的语法不正确。”
猜你喜欢
  • 2018-09-08
  • 1970-01-01
  • 2011-01-28
  • 2014-08-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多