0
我正在使用Dapper ORM來過濾和獲取對象的集合。當我試圖按日期過濾對象時,我正在收到SQL錯誤。但相同的查詢在SQL Server 2012之下運行完美是我的代碼在Dapper ORM中的兩個日期之間過濾數據
DataTableSettings DS = new DataTableSettings();
DataTableElements DataTableElements = new DataTableElements();
DataTableElements.Limit = param.iDisplayLength;
DataTableElements.Start = param.iDisplayStart;
DataTableElements.SortColumn = "a.Ser_Id"; //default sorting column
DataTableElements.AType = "DESC";
DataTableElements.ListingFields = "Ser_SlNo,a.Ser_Id as SERID,a.Ser_LogNo AS SLNO,Cas_Name,a.Ser_CallReason AS RSON," +
"Ser_AssignedTo,Ser_CallTime,Ser_CallDate,a.Cus_Id AS CUSID,a.Cas_Id AS CSID," +
"Cus_Name,Add_Landmark,a.Prm_Id AS PRMID,Prm_Model, c.Cut_Id AS CUTID,Cut_Name";
DataTableElements.TableName = "ServiceCalls as a inner join CallStatus as b on a.Cas_Id = b.Cas_Id" +
"inner join Customers as c on a.Cus_Id = c.Cus_Id" +
"inner join Products as d on a.Prd_Id = d.Prd_Id" +
"inner join AddressDetailes as e on a.Add_id = e.Add_id" +
"inner join Companies as f on a.Com_Id = f.Com_Id" +
"inner join ProductModels as g on a.Prm_Id = g.Prm_Id" +
"inner join ProductSerials as h on a.Prs_Id = h.Prs_Id" +
"inner join CustomerTypes as i on c.Cut_Id = i.Cut_Id" +
"inner join UserServices as j on a.Ser_Id = j.Ser_Id" +
"where CONVERT(date, Ser_CallDate,101) BETWEEN CONVERT(date,'3/1/2016 12:00:00 AM', 101) AND CONVERT(date,'3/31/2016 12:00:00 AM', 101)" +
"and j.Usr_Id = 21";
var str = DS.GetDataTableElements(DataTableElements);
public dynamic GetDataTableElements(DataTableElements DataTableElements)
{
_db = new SqlConnection(db.Database.Connection.ConnectionString);
string Sql = "exec SelectFomTable @TableName ='" + DataTableElements.TableName + "',@Limit =" + DataTableElements.Limit + ",@Start =" + DataTableElements.Start + ",@SortColumn ='" + DataTableElements.SortColumn + "' ";
Sql += ",@ListingFields='" + DataTableElements.ListingFields + "'";
Sql += ",@AType='" + DataTableElements.AType + "'";
Sql += ",@Filter='" + DataTableElements.Filter + "'";
dynamic retuns = _db.Query<dynamic>(Sql).ToList();
return retuns;
}
和我的存儲過程如下
ALTER PROCEDURE [dbo].[SelectFomTable]
-- Add the parameters for the stored procedure here
(@TableName varchar(max),@Limit Int=10,@Start int=0,@SortColumn varchar(50),@Filter varchar(max)=null,@ListingFields varchar(max)=null,@AType varchar(max)=null)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
Declare @sts varchar(max);
Declare @List varchar(max);
Declare @Assend varchar(max);
Declare @End int ;
set @End [email protected][email protected];
set @List =isnull(@ListingFields,'*');
set @Assend =isnull(@AType,'ASC');
set @sts= 'WITH tab as (select ROW_NUMBER() OVER(ORDER BY '[email protected]+' '[email protected]+') AS RowIncrement, '[email protected]+' from '[email protected][email protected]+' ),
tab1 as (select count(*) as TotalCount from '[email protected][email protected]+')
select * from tab,tab1 where RowIncrement between '+CONVERT(varchar(10), @Start) +' and '+CONVERT(varchar(10), @End);
set @[email protected][email protected];
--if (@Filter is not null)
--begin
--set @[email protected][email protected];
--end
print @sts;
exec(@sts);
和我得到的錯誤如下
{"Incorrect syntax near '3'."}
請幫忙.....
我看不出這裏短小精悍相關的任何東西,但是如果你考慮到每個加入/哪裏線需求在連接下一行之前有一個空格,您將得到對語法錯誤的可能解釋。關閉作爲印刷錯誤 – Steve
我正在使用上面的SQL查詢從數據庫中獲取數據,該查詢獲取錯誤,在連接之前添加空間,但仍然收到相同的錯誤。 –
我在這裏看不到精巧的東西。專業提示:當你使用簡單的字符串和連接時,真的很難讀取SQL。一個更好的主意是使用*逐字符字符串*,然後可以在視覺上在字符串中包含行brraks *。只需使用'@「嗒嗒......嗒嗒......嗒嗒'',你就可以在線內的任何位置放置換行符。如果問題與字符串有關:這將有所幫助。 –