实体框架 - >执行和LIKE子句

时间:2015-10-29 09:48:51

标签: c# sql sql-server entity-framework stored-procedures

在将需要执行类似操作的参数传递给我的存储过程时,我遇到了一些问题。

这是我到目前为止的代码如下:

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中做任何事情似乎都有效,有没有人有这个或解决方案的经验?

由于 卡尔

1 个答案:

答案 0 :(得分:0)

不带引号传递参数:

SqlParameter pTrains = new SqlParameter("@Trains", trains);

在存储过程中,您将其声明为:

@Trains varchar(100) = NULL

并在查询中使用它:

AND (trains LIKE @Trains + '%' OR @Trains IS NULL)