2011-11-24 74 views
3

我有,当我在SQL ServerLINQ到SQL日期格式:查询不起作用

exec SelectOfficeNameGroup '2011-10-05', '2011-11-09', '' 

返回110行执行这个查询的存储过程。

现在我有两个日期选择在我的C#3.5的形式和一个按钮,执行这样的查询:

var result = context.SelectOfficeNameGroup(dateTimePickerFrom.Value, dateTimePickerTo.Value, ""); 

,但其唯一的回报2行。

我的日期选择器的格式是MM/DD/YYYY

这是我的程序

ALTER PROC [dbo].[SelectOfficeNameGroup] 
    @From datetime, 
    @To datetime, 
    @OfficeName nvarchar(50) 
AS 
BEGIN 
    SELECT 
     ID AS ProductID, OfficeName, 
     SUM(Quantity) AS Quantity, 
     SUM(TotalPrice) AS TotalPrice, 
     Category 
    FROM 
     ProductLogWithCategory 
    WHERE 
     DateTime BETWEEN @From AND @To AND OfficeName = @OfficeName 
    GROUP BY 
     OfficeName, ID, Category 

    return 
END 

有什么建议?

+0

也许你应该将日期转换为YYYY-MM- DD? –

+0

Gaby aka G. Petrioli <<我试着让日期选择格式为custoom YYYY-MM-DD,但返回值是MM/DD/YYYY。我如何转换? –

+0

@Acid,贴出答案与转换.. –

回答

1

var result = context.SelectOfficeNameGroup(dateTimePickerFrom.Value.ToString("yyyy-MM-dd"), dateTimePickerTo.Value.ToString("yyyy-MM-dd"), ""); 

看一看在DateTime.ToString documentation


更新

尝试只是为了安全起见,尽量

ALTER PROC [dbo].[SelectOfficeNameGroup] 
    @From varchar(8), 
    @To varchar(8), 
    @OfficeName nvarchar(50) 
AS 
BEGIN 
    SELECT 
     ID AS ProductID, OfficeName, 
     SUM(Quantity) AS Quantity, 
     SUM(TotalPrice) AS TotalPrice, 
     Category 
    FROM 
     ProductLogWithCategory 
    WHERE 
     DateTime BETWEEN @From AND @To AND OfficeName = @OfficeName 
    GROUP BY 
     OfficeName, ID, Category 

    return 
END 

,并使用它像这样

从SQL

exec SelectOfficeNameGroup '20111005', '20111109', '' 

从LINQ

var result = context.SelectOfficeNameGroup(dateTimePickerFrom.Value.ToString("yyyyMMdd"), dateTimePickerTo.Value.ToString("yyyyMMdd"), ""); 
+0

它的转换为字符串我需要日期时间。错误'Med.DataClasses1DataContext.SelectOfficeNameGroup(System.DateTime ?, System.DateTime ?, string)'的最佳重载方法匹配有一些无效参数 –

+0

@Acid,'exec SelectOfficeNameGroup'2011-05-10','2011- 09-11','''返回与linq版本相同的两个?也许它正在阅读您的文本版本为日月而不是月日 –

+0

没有它的返回零... –

0
DateTime.Parse('your date in MM/DD/YYYY', new CultureInfo("en-US")).ToString("yyyy-MM-dd") 
+0

谢谢,但它说错误'最佳重载方法匹配的'Med.DataClasses1DataContext.SelectOfficeNameGroup(System.DateTime?,System.DateTime?,字符串)'有一些无效的参数 –

+0

@Acid,然后删除'.ToString' –

+0

抱歉。但是如何?只是删除? DateTime.Parse(dateTimePickerFrom.Value.ToShortDateString(),new CultureInfo(“en-US”));喜欢这个?但它仍然返回相同 –