在将需要执行like的参数传递到我的存储过程时,我遇到了一个小问题。
这是我目前所拥有的代码,如下所示:
using (GIDSEntities db = new GIDSEntities())
{
SqlParameter tvpClientList = new SqlParameter("@CorporateClientList", dtCompanies);
tvpClientList.TypeName = "TravellerTracking.ClientIdList";
SqlParameter pFromDate = new SqlParameter("@FromDate", fDate);
SqlParameter pToDate = new SqlParameter("@ToDate", tDate);
SqlParameter pLocation = new SqlParameter("@Location", "%" + location + "%");
SqlParameter pTrains = new SqlParameter("@Trains", "%" + trains + "%");
List<RailData> international = db.Database.SqlQuery<RailData>("exec TravellerTracking.InternationalRail @FromDate, @ToDate, @CorporateClientList, @Location, @Trains", pFromDate, pToDate, tvpClientList, pLocation, pTrains).ToList();
Rail.AddRange(international);
}我的存储过程where子句如下所示:
WHERE ((router LIKE CASE WHEN @Location = '%%' THEN router ELSE @Location END)
AND
((@Trains = '%%' AND trains = trains) OR trains LIKE @Trains))正如您所看到的,我尝试以不同的方式编写SQL,以允许用户不传递任何内容,而传递某些内容。
我在C#或SQL中所做的似乎都不起作用,有谁有这方面的经验或解决方案吗?
谢谢你,卡尔
发布于 2015-10-29 17:58:51
传入不带引号的参数:
SqlParameter pTrains = new SqlParameter("@Trains", trains);在存储过程中,您可以这样声明它:
@Trains varchar(100) = NULL在查询中使用它,如下所示:
AND (trains LIKE @Trains + '%' OR @Trains IS NULL)https://stackoverflow.com/questions/33410823
复制相似问题