我希望查询检查数据库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
答案 0 :(得分:0)
我认为您要查询的是将删除所有早于现在结束的广告的查询?您当前的查询正在检查是否有任何广告现在之前结束,然后删除带有您传递的ID的广告。
基于以上假设,请尝试以下查询:
ALTER PROC [dbo].[DeleteByDate]
AS BEGIN
UPDATE a
SET a.Status = 0
FROM Advertisement a
WHERE a.EndDate < GETDATE()
END