【问题标题】:ASP.Net Custom Delete FunctionASP.Net 自定义删除功能
【发布时间】:2012-05-31 08:29:44
【问题描述】:

我有一个数据库,我想当我最初生成它时,我并没有费心选择“生成删除函数”选项,现在我发现自己想要添加它。

目前,我有一个绑定到数据库的 gridview,每行都有一个删除按钮。看来我应该能够使用以下代码运行自定义删除功能;

protected void gvUsers_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    using (SqlConnection conn = new SqlConnection(database.ConnectionString))
    {
        SqlCommand command = conn.CreateCommand();
        command.CommandText = "DELETE FROM userlist WHERE Username='@insUsername'";
        command.CommandType = System.Data.CommandType.Text;

        command.Parameters.Add(new SqlParameter("insUsername", gvUsers.Rows[e.RowIndex].Cells[1].Text));

        conn.Open();
        command.ExecuteNonQuery();
    }
}

将上面的代码用作插入函数时我没有遇到任何问题...我认为这与按钮是 GridView 的一部分这一事实有关吗?此刻我得到了;除非指定了 DeleteCommand,否则数据源“数据库”不支持删除。

在这方面的任何帮助都会很棒,谢谢。

【问题讨论】:

  • 你能更清楚地说明你的问题是什么吗?我无法理解问题所在,您需要做什么!
  • 为什么会出现此错误“除非指定 DeleteCommand,否则数据源 'database' 不支持删除。”出现?我该如何解决?我的插入命令没有这个问题...
  • @FizzBu​​zz:我必须查看您的一些其他代码才能确定,但​​我怀疑它是因为您使用的是删除按钮,代码知道需要指定删除命令(否则如何它知道那个按钮的作用吗?)。由于您没有指定它,因此会引发该错误。

标签: asp.net sql


【解决方案1】:

您可以将 SQL 放入 DeleteCommand 而不仅仅是过程名称...

http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.deletecommand.aspx 显示了这是如何完成的,但关键是:

DeleteCommand="DELETE FROM [Order Details] WHERE OrderID=@OrderID;DELETE FROM Orders WHERE OrderID=@OrderID;"

这应该可以解决它不允许在没有删除命令的情况下删除的问题。 :)

编辑添加:

我发现的另一种替代方法表明,在传递删除时,该函数运行后会引发该错误。您可以在自己完成删除后使用e.Cancel=true 取消删除事件。 Source

【讨论】:

  • 哇哦,好的。我积极避免这样做,因为我认为这不合适。我想鉴于删除命令来自 GridView,这确实是有道理的……试过了,效果很好。谢谢!
  • 我不确定自己是否是e.cancel 活动的忠实粉丝,但它确实起到了作用。它可能具有潜在的负面影响,例如不触发 RowDeleted 事件,并且我不知道控件认为它没有删除任何内容而实际上已删除基础数据等事实是否会导致问题。一天结束,但如果它有效并且它是您代码的最佳解决方案,那么就去做吧。 :)
【解决方案2】:

不是一个完整的答案

您的查询文本应为:

"DELETE FROM userlist WHERE Username=@insUsername"

由于您使用的是参数,因此不需要单引号。

【讨论】:

  • 是的...只是我试图弄清楚为什么它不起作用...不过,请注意,我会去掉引号。
猜你喜欢
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 2018-02-10
  • 2012-04-28
  • 2019-08-06
  • 1970-01-01
  • 2023-01-12
  • 2012-05-19
相关资源
最近更新 更多