我已创建此存储过程,以按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
我收到了以下错误
从字符转换日期和/或时间时转换失败 字符串。
答案 0 :(得分:1)
修复您的&#34;数据未进入视图&#34;问题,检查当前未绑定到任何模型对象的incomplete_product_result
的模型。
答案 1 :(得分:1)
打开SSMS(SQL Server Management Studio)并键入
$.ajax({
type: 'GET',
url: '//steamcommunity.com/id/STEAMIDHERE/inventory/json/730/2',
async: false,
jsonp: "callback",
jsonpCallback: 'someCallBackFunction',
contentType: "application/json",
dataType: 'jsonp',
success: function (data) {
console.log(data);
//do your stuff
},
error: function (e) {
console.log(e);
}
});
并按F5键,您将收到该错误,与Web前端没有任何关系
这个问题就是这个问题:
EXEC FindIncomplete_Products NULL,NULL,NULL,NULL,'2015-01-01'
您正在将字符串连接到某个日期,因此它会尝试将字符串隐式转换为日期,并且肯定无法将'%' + @date + '%'
转换为日期。
要解决此问题,请更改此行
%
到此
AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] LIKE '%' + @date + '%')
存储过程中的
第一行实际上没有逻辑意义。你不能AND (@date IS NULL OR [dbo].[AB_Product].[CreatedDate] = @date)
对抗约会。
这假设网络代码中没有其他问题。
如果您不知道如何使用SSMS,您是如何创建存储过程的?
(这实际上都是基于@Bhavek的评论 - 他先注意到了!)