ASP.NET
.NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。
20 个问题
我有一个相当简单的存储过程,当管理员不需要时,就会删除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
你好,
添加删除参数后,它现在将执行 SP 并找到 FunderId,但它始终为 NULL,所以我几乎解决了它。
删除行时,必须知道哪一行和它的主键 id,否则,就无法知道删除了哪一行。因此,它将为 null。另外根据你的代码id为 Int 类型。我建议你可以这样做:
sqlCommand.Parameters.AddWithValue("@FunderId", Convert.ToInt32(id.Text))
如果答案是正确的解决方案,请单击“接受答案”并请投赞成票。如果您对此答案有其他疑问,请点击“评论”。
注意:如果您想接收此线程的相关电子邮件通知,请按照我们文档中的步骤启用电子邮件通知。
最好的问候