【问题标题】:Sending parameter to code behind from stored procedure从存储过程将参数发送到代码后面
【发布时间】:2012-07-10 06:09:06
【问题描述】:

我正在使用 FormView 并使用存储过程将其绑定到 SqlDataSource 以编辑记录。问题是在更新记录后我需要调用另一个函数,我正在使用按钮的onClick 属性。

此函数必须使用在FormView 中编辑的记录的ID 将几条记录插入到另一个表中。我知道如何在同一个存储过程中使用SCOPE_IDENTITY,但这次我需要一些更容易在代码隐藏中完成的逻辑,但我不知道如何获取 ID,所以任何线索都是很棒。

这是按钮:

 <asp:Button ID="EditButton" runat="server" CausesValidation="True" CommandName="Update"
                            Text="Edit" OnClick="setProcessProgress" />

下面是代码的精简版:

protected void setProcessProgress(object sender, EventArgs e)
{
   int ID_p;
   ID_p = ; //TODO: Here I need to obtain the ID of the last edited record from the EditButton
   setProgress(ID_p);
}

存储过程是一个简单的UPDATE 语句。

我正在考虑将参数传递给后面的代码,但不确定如何,可能是这样的OnClick="setProcessProgress(@id)"

【问题讨论】:

  • 实际上这与SCOPE_IDENTITY()无关,从我对你的问题的理解来看。我的意思是,你说你的存储过程是一个简单的UPDATE 语句,但是SCOPE_IDENTITY() 用于获取最近插入的ID(不是更新) 行。您的程序如何知道要更新哪一行?您不是将 ID 作为参数传递吗?如果没有,请显示您的存储过程的定义。

标签: asp.net sql-server stored-procedures


【解决方案1】:

像这样尝试,您需要将OnCommand="CommandEventHandler" 事件处理程序附加到您的按钮。查看更多信息Button.Command

<asp:Button ID="EditButton" runat="server" CausesValidation="True" CommandName="Update"
                            Text="Edit"  
           CommandArgument="1"
           OnCommand="CommandBtn_Click" />

以及获取ID的代码

protected void CommandBtn_Click(Object sender, CommandEventArgs e) 

{ if (e.CommandName == "Update")
   {
      yourID =Convert.ToInt32(e.CommandArgument); 
   }
} 

【讨论】:

  • 我得到一个“'CommandBtn_Click 没有重载匹配委托 System.EventHandler。不知道为什么。
【解决方案2】:

您可以使用 out 参数更新存储过程。这将在

之后为您提供 ID

更新。

然后您可以使用该 ID 进行插入。

http://blogs.msdn.com/b/spike/archive/2009/05/07/a-simple-example-on-how-to-get-return-and-out-parameter-values-using-ado-net.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多