将linq查询中存储过程的参数's日期类型转换为varchar
本文关键字:日期 类型转换 varchar 查询 linq 存储过程 参数 | 更新日期: 2023-09-27 18:13:06
我创建了这个存储过程来按type
、category
、country
、subsidary
、date
筛选产品。
CREATE PROCEDURE [dbo].[FindIncomplete_Products]
@type nvarchar(250),
@category nvarchar(250),
@country nvarchar(250),
@subsidary nvarchar(250),
@date datetime
AS
Begin
select [dbo].[AB_Product].[ProductID],
[dbo].[AB_Product].[ProductTitleEn],
[dbo].[AB_Product].[ProductTitleAr],
[dbo].[AB_Product].[Status],
[dbo].[AB_ProductType].[ProductTypeNameEn],
[dbo].[AB_ProductType].[ProductTypeNameAr],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameEn],
[dbo].[AB_ProductTypeCategory].[ProductCategoryNameAr],
[dbo].[AB_Subsidary].[SubsidaryNameEn],
[dbo].[AB_Subsidary].[SubsidaryNameAr],
[dbo].[AB_Subsidary].[Country]
from
[dbo].[AB_Product]
inner join
[dbo].[AB_ProductType] on [dbo].[AB_ProductType].[ProductTypeID] = [dbo].[AB_Product].[ProductTypeID]
inner join
[dbo].[AB_ProductTypeCategory] on [dbo].[AB_ProductTypeCategory].[ProductCategoryID] = [dbo].[AB_Product].[ProductCategoryID]
inner join
[dbo].[AB_Subsidary] on [dbo].[AB_Subsidary].[SubsidaryID] = [dbo].[AB_Product].[Subsidary_ID]
WHERE
(@type IS NULL OR [dbo].[AB_Product].[ProductTypeID] LIKE '%' + @type + '%')
AND (@category IS NULL OR [dbo].[AB_Product].[ProductCategoryID] LIKE '%' + @category + '%')
AND (@country IS NULL OR [dbo].[AB_Subsidary].[Country] LIKE '%' + @country + '%')
AND (@subsidary IS NULL OR [dbo].[AB_Product].[Subsidary_ID] LIKE '%' + @subsidary + '%')
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] LIKE '%' + @date + '%')
End
我通过我的c#控制器类中的LINQ查询传递参数值。这是linq查询
public ActionResult Program_Search(string type, string category, string country, string subsidary, DateTime? date)
{
var incomplete_product_result = db.Database.SqlQuery<ProductCollection>("FindIncomplete_Products @type = {0}, @category = {1}, @country = {2}, @subsidary = {3}, @date = {4}", type, category, country, subsidary, date).ToList();
return View(incomplete_product_result);
}
一旦尝试通过绑定URL来传递参数,如遵循
http://localhost:49669/Home/Program_Search?type=002&category=null&subsidary=null&country=null&date=12/12/1889
我得到以下错误
从字符转换日期和/或时间时转换失败字符串。
打开SSMS (SQL Server Management Studio),输入
EXEC FindIncomplete_Products NULL,NULL,NULL,NULL,'2015-01-01'
,然后按F5,你会得到这个错误,与web前端没有任何关系
这个问题是这个表达式:
'%' + @date + '%'
您正在将字符串连接到日期,因此它试图隐式地将字符串强制转换为日期,并且它当然不能将%
转换为日期。
修改
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] LIKE '%' + @date + '%')
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] = @date)
存储过程第一行实际上没有逻辑意义。你不能用LIKE
代替日期。
假设在web代码中没有进一步的问题。
如果你不知道如何使用SSMS,你如何创建存储过程?
(这实际上都是基于@Bhavek的评论-他首先注意到它!)
要修复您的"数据未进入视图"问题,请检查incomplete_product_result
模型,该模型目前未绑定到任何模型对象。