在将需要执行类似操作的参数传递给我的存储过程时,我遇到了一些问题。
这是我到目前为止的代码如下:
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中做任何事情似乎都有效,有没有人有这个或解决方案的经验?
由于 卡尔
答案 0 :(得分:0)
不带引号传递参数:
SqlParameter pTrains = new SqlParameter("@Trains", trains);
在存储过程中,您将其声明为:
@Trains varchar(100) = NULL
并在查询中使用它:
AND (trains LIKE @Trains + '%' OR @Trains IS NULL)