Webmatrix - 可重用的数据库插入查询

时间:2014-02-13 16:50:17

标签: sql function razor webmatrix

我有一个SQL查询(如下所示),我需要定期在5个不同的页面上运行。我的问题是,有没有一种方法可以写一次,并在每个页面上调用它(可能使用函数或帮助器)?

    if(IsPost){
    var ImageCount = db.QueryValue("SELECT COUNT (*) FROM Property_Images WHERE PropertyID = @0", rPropertyId);
    var RateCount =  db.QueryValue("SELECT COUNT (*) FROM RateInfo WHERE PropertyID = @0", rPropertyId);
    var ExpiryDate = db.QueryValue("SELECT ExpiryDate FROM Property_Info WHERE PropertyID = @0", rPropertyId);


    if(ImageCount > 0 && RateCount > 0 && ExpiryDate > DateTime.Now){
        db.Execute("UPDATE Property_Info SET IsActive = 1 WHERE PropertyID = @0", rPropertyId);
    } else {
        db.Execute("UPDATE Property_Info SET IsActive = 0 WHERE PropertyID = @0", rPropertyId);
    }
    Response.Redirect(Request.RawUrl);
    }

我之前使用过函数来重用SQL查询,但我总是把它们分配为'bool',因为结果是true或force,但这不是这个特定查询的情况。有什么想法吗?

2 个答案:

答案 0 :(得分:2)

您不能使用SPROC吗?您还可以在需要时返回输出参数

 string SQL = "exec dbo.myprocname @0";
 db.Execute(SQL, rPropertyId);

答案 1 :(得分:2)

方法可以返回void(或没有)。转换为函数的当前代码可能如下所示:

@functions{
    public static void UpdateProperty(int propertyId, Uri url){
        var db = Database.Open("....");
        var ImageCount = db.QueryValue("SELECT COUNT (*) FROM Property_Images WHERE PropertyID = @0", propertyId);
        var RateCount =  db.QueryValue("SELECT COUNT (*) FROM RateInfo WHERE PropertyID = @0", propertyId);
        var ExpiryDate = db.QueryValue("SELECT ExpiryDate FROM Property_Info WHERE PropertyID = @0", propertyId);


        if(ImageCount > 0 && RateCount > 0 && ExpiryDate > DateTime.Now){
            db.Execute("UPDATE Property_Info SET IsActive = 1 WHERE PropertyID = @0", propertyId);
        } else {
            db.Execute("UPDATE Property_Info SET IsActive = 0 WHERE PropertyID = @0", propertyId);
        }
        HttpContext.Current.Response.Redirect(url);
    }
}

然后你会这样称呼:

Is(IsPost){
    Functions.UpdateProperty(rPropertyId, Request.RawUrl);
}