我有一个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,但这不是这个特定查询的情况。有什么想法吗?
答案 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);
}