如何使用存储过程结果 return 在 ASP.NET MVC 中将项目列为 JSON?
How to return list item as JSON in ASP.NET MVC using stored procedure result?
我想 return 来自 SQL 服务器的一些数据 table;我使用了这样的存储过程:
ALTER PROCEDURE [dbo].[SP_TITILESEARCH]
(@FLAG INT,
@Author VARCHAR(300) = NULL,
@Category VARCHAR(100) = NULL,
@Title VARCHAR(MAX) = NUll)
AS
BEGIN
IF (@FLAG = 1)
BEGIN
SELECT *
FROM SmartLibClientDB.dbo.LibraryMediaEntry
WHERE Title LIKE '%' + @Title + '%'
END
END
在服务器端,存储过程是这样执行的:
var media = new LibraryMediaEntry();
var db = new SchooberrySchoolEntities();
SqlParameter param1 = new SqlParameter("@Title", "Charpy Impact Test");
SqlParameter param2 = new SqlParameter("@FLAG", 1);
media = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @Title, @FLAG", param1, param2)
.ToList()
.FirstOrDefault(); // Getting error when executed
return Json(media, JsonRequestBehavior.AllowGet);
但是代码报错:
Conversion failed when converting the varchar value 'Charpy Impact Test' to data type int.
我想做的是 return table 数据作为 JSON
这是正确的方法吗?或者为什么会出错?我不明白我做错了什么,因为要求转换为 int
的错误列实际上是 varchar
列
注意:我正在使用存储过程,因为我正在 returning 的数据来自同一服务器上的不同数据库
Conversion failed when converting the varchar value 'Charpy Impact Test' to data type int.
这意味着 @Title
参数需要一个 int
(整数)。 Charpy Impact Test
不是整数,因此您的存储过程调用失败。选择一个整数值是第一步。
want to do is return the table data as JSON
您的代码:
media = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @Title,@FLAG"
,param1
,param2)
.ToList()
.FirstOrDefault();
正在调用 .FirstOrDefault()
,这将导致媒体中出现单行。您打算返回单条记录吗?
您的代码可能存在几个问题。
您的存储过程参数 @FLAG
定义为 varchar(25)
。然而,在填充它时,您传递的是一个整数 (SqlParameter param2 = new SqlParameter("@FLAG",1);
)。将其更改为:
var param2 = new SqlParameter("@FLAG", "1");
关于您遇到的实际错误...检查您的 LibraryMediaEntry 对象。 属性 是否有机会被填充为 int?这可能就是问题所在。
最后,你的存储过程。 SELECT * FROM
是存储过程中的错误形式。指定您想要的实际字段。它还有助于调试。
我找不到导致错误的原因,但传递包括 null 在内的所有参数为我完成了工作
var DB = new dbEntities();
SqlParameter param1 = new SqlParameter("@FLAG", 1);
SqlParameter param2 = new SqlParameter("@Author", "");
SqlParameter Param3 = new SqlParameter("@Category", "");
SqlParameter param4 = new SqlParameter("@Title", Convert.ToString(id));
var medias = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @FLAG,@Author,@Category,@Title", param1, param2, Param3, param4).ToList();
我想 return 来自 SQL 服务器的一些数据 table;我使用了这样的存储过程:
ALTER PROCEDURE [dbo].[SP_TITILESEARCH]
(@FLAG INT,
@Author VARCHAR(300) = NULL,
@Category VARCHAR(100) = NULL,
@Title VARCHAR(MAX) = NUll)
AS
BEGIN
IF (@FLAG = 1)
BEGIN
SELECT *
FROM SmartLibClientDB.dbo.LibraryMediaEntry
WHERE Title LIKE '%' + @Title + '%'
END
END
在服务器端,存储过程是这样执行的:
var media = new LibraryMediaEntry();
var db = new SchooberrySchoolEntities();
SqlParameter param1 = new SqlParameter("@Title", "Charpy Impact Test");
SqlParameter param2 = new SqlParameter("@FLAG", 1);
media = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @Title, @FLAG", param1, param2)
.ToList()
.FirstOrDefault(); // Getting error when executed
return Json(media, JsonRequestBehavior.AllowGet);
但是代码报错:
Conversion failed when converting the varchar value 'Charpy Impact Test' to data type int.
我想做的是 return table 数据作为 JSON
这是正确的方法吗?或者为什么会出错?我不明白我做错了什么,因为要求转换为 int
的错误列实际上是 varchar
列
注意:我正在使用存储过程,因为我正在 returning 的数据来自同一服务器上的不同数据库
Conversion failed when converting the varchar value 'Charpy Impact Test' to data type int.
这意味着 @Title
参数需要一个 int
(整数)。 Charpy Impact Test
不是整数,因此您的存储过程调用失败。选择一个整数值是第一步。
want to do is return the table data as JSON
您的代码:
media = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @Title,@FLAG"
,param1
,param2)
.ToList()
.FirstOrDefault();
正在调用 .FirstOrDefault()
,这将导致媒体中出现单行。您打算返回单条记录吗?
您的代码可能存在几个问题。
您的存储过程参数 @FLAG
定义为 varchar(25)
。然而,在填充它时,您传递的是一个整数 (SqlParameter param2 = new SqlParameter("@FLAG",1);
)。将其更改为:
var param2 = new SqlParameter("@FLAG", "1");
关于您遇到的实际错误...检查您的 LibraryMediaEntry 对象。 属性 是否有机会被填充为 int?这可能就是问题所在。
最后,你的存储过程。 SELECT * FROM
是存储过程中的错误形式。指定您想要的实际字段。它还有助于调试。
我找不到导致错误的原因,但传递包括 null 在内的所有参数为我完成了工作
var DB = new dbEntities();
SqlParameter param1 = new SqlParameter("@FLAG", 1);
SqlParameter param2 = new SqlParameter("@Author", "");
SqlParameter Param3 = new SqlParameter("@Category", "");
SqlParameter param4 = new SqlParameter("@Title", Convert.ToString(id));
var medias = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @FLAG,@Author,@Category,@Title", param1, param2, Param3, param4).ToList();