我有一个相当简单的存储过程,当管理员不需要时,就会删除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