查询未检查数据库AdvID本身并删除

时间:2019-02-07 01:49:36

标签: c# sql sql-server tsql ado.net

我希望查询检查数据库AdvID本身并在加载页面时删除。为什么我收到此错误调用“ System.Data.SqlClient.SqlException:'过程或函数'DeleteByDate'期望未提供的参数'@AdvID'”。它不应该检查数据库本身并删除吗?为什么我必须为其提供AdvID?这是我的page_load代码

protected void Page_Load(object sender, EventArgs e)
{
    //Generate auto ID
    SqlDataAdapter sad = new SqlDataAdapter("Select isnull(max(cast(AdvID as int)),0)+1 from Advertisement", sqlCon);
    DataTable dt = new DataTable();
    sad.Fill(dt);
    advertismentIdTb.Text = dt.Rows[0][0].ToString();

    //PageLoadValidations
    statusTb.Text = "1";
    endDateTb.Attributes["min"] = DateTime.Now.ToString("yyyy-MM-dd");
    btnDelete.Enabled = false;
    btnUpdate.Enabled = false;
    Image1.Visible = false;

    //Delete from DB Condition (EndDate)
    if (sqlCon.State == ConnectionState.Closed)
        sqlCon.Open();
    SqlCommand sqlCmd = new SqlCommand("DeleteByDate", sqlCon);
    sqlCmd.CommandType = CommandType.StoredProcedure;
    sqlCmd.ExecuteNonQuery();
    sqlCon.Close();

    //Show GridView
    FillGridView();
}

这是我的剧本

ALTER PROC [dbo].[DeleteByDate]
@AdvID int
AS
BEGIN
    DECLARE @CurrentDate DATE = GETDATE() -- to get current date

    -- Assuming that Advertisement table has the column EndDate
    IF EXISTS (SELECT * FROM Advertisement a WHERE a.EndDate < @CurrentDate )
    BEGIN 
        UPDATE a SET a.Status = 0
        FROM Advertisement a
        WHERE a.AdvID = @AdvID  
    END 
END

1 个答案:

答案 0 :(得分:0)

我认为您要查询的是将删除所有早于现在结束的广告的查询?您当前的查询正在检查是否有任何广告现在之前结束,然后删除带有您传递的ID的广告。

基于以上假设,请尝试以下查询:

ALTER PROC [dbo].[DeleteByDate]
AS BEGIN

    UPDATE  a 
    SET     a.Status = 0
    FROM    Advertisement a
    WHERE   a.EndDate < GETDATE()

END