在可编辑GridView中,删除存储过程找不到ID

XuDong Peng-MSFT 10,841 信誉分 Microsoft 供应商
2024-02-26T09:23:04.41+00:00

我有一个相当简单的存储过程,当管理员不需要时,就会删除ID。我在 Web 应用程序的前端使用它。 这是 T-SQL:

ALTER PROCEDURE [dbo].[spGRNTSFunderId_Delete] 
@FunderId int = NULL 
AS BEGIN SET NOCOUNT ON; 
DELETE FROM tblGRNTSFunders WHERE ([FunderId] = @FunderId AND @FunderId IS NOT NULL) END

我只是尝试使用前端通过GridView 中的一个按钮调用它,这就是我在其他页面上实现的方式。

<asp:LinkButton runat="server" ID="lbtnDelete" CommandName="Delete"></asp:LinkButton>

删除内容位于 SDS 声明中。

<asp:SqlDataSource ID="sdsFunders_Page" runat="server" ConnectionString="<%$ ConnectionStrings:DatabaseLive %>"
        SelectCommandType="StoredProcedure"
        SelectCommand="spGRNTSFunders_Select"
        DeleteCommandType="StoredProcedure"
        DeleteCommand="spGRNTSFunders_Delete">
        <SelectParameters>
            <asp:QueryStringParameter DefaultValue="0" Name="FunderId" QueryStringField="FunderId" Type="Int32" ConvertEmptyStringToNull="true" />
        </SelectParameters></asp:SqlDataSource>

检查 SQL Profiler,删除时执行的命令是 exec spFunderId_Delete,但没有调用 @FunderId。 它应该是spFunderId_Delete @FunderId=someId

我尝试对其进行编码,但它也不起作用。 但它找到了 ID..这就是我尝试过的。

protected void gvFunders_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
    string procedureDelete = "spGRNTSFunders_Delete";

    int index = gvFunders.EditIndex;
    GridViewRow row = gvWorkPeriods_WP.Rows[index];

    // find wp ID
    Label lblFunderId = (Label)row.FindControl("lblFunderId");
    string FunderId = lblFunderId.Text;

    SqlCommand cmd = new SqlCommand();
    cmd.CommandType = CommandType.StoredProcedure;
    cmd.CommandText = procedureDelete;

    cmd.Parameters.AddWithValue("FunderId", FunderId);
    gvFunders_WP.DataBind();
}

添加删除参数后,它现在将执行 SP 并找到 FunderId,但它始终为 NULL,所以我几乎解决了它。

<DeleteParameters> 
    <asp:QueryStringParameter Name="FunderId" QueryStringField="lblFunderId" Type="Int32"/> 
</DeleteParameters>

Note: 该案例整理于:Delete Stored Procedure not finding Id in Editable GridView

ASP.NET
ASP.NET
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
20 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Zhi Lv - MSFT 32,736 信誉分 Microsoft 供应商
    2024-02-26T09:48:53.32+00:00

    你好,

    添加删除参数后,它现在将执行 SP 并找到 FunderId,但它始终为 NULL,所以我几乎解决了它。

    删除行时,必须知道哪一行和它的主键 id,否则,就无法知道删除了哪一行。因此,它将为 null。另外根据你的代码id为 Int 类型。我建议你可以这样做: 

    sqlCommand.Parameters.AddWithValue("@FunderId", Convert.ToInt32(id.Text))
    

    如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。
    注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。
    最好的问候

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。