c# - 如何使用存储过程结果在 ASP.NET MVC 中将列表项作为 JSON 返回?
问题描述
我想从 SQL Server 表中返回一些数据;我使用了这样的存储过程:
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);
但是代码抛出了一个错误:
将 varchar 值“Charpy Impact Test”转换为数据类型 int 时转换失败。
我想要做的是返回表数据,因为JSON
这是正确的方法吗?或者为什么会出错?我不明白我做错了什么,因为错误要求转换为的列int
实际上是一varchar
列
注意:我使用的是存储过程,因为我返回的数据来自同一服务器上的不同数据库
解决方案
将 varchar 值“Charpy Impact Test”转换为数据类型 int 时转换失败。
这意味着该@Title
参数需要一个int
(整数)。Charpy Impact Test
不是整数,因此您的存储过程调用失败。选择一个整数值是第一步。
想要做的是将表数据作为 JSON 返回
你的代码:
media = db.Database.SqlQuery<LibraryMediaEntry>("exec SP_TITILESEARCH @Title,@FLAG"
,param1
,param2)
.ToList()
.FirstOrDefault();
正在调用.FirstOrDefault()
,这将导致媒体中出现单行。您是否打算返回一条记录?
推荐阅读
- d3.js - 如何在 d3 中转换/翻译文本元素?
- ios - 根据 UIlabel IBDesignable 中的标题和副标题设置不同的字体
- c# - DbType 的强类型名称
- c++ - 为什么 1 * 4 = 196?
- python - 这个命令是如何工作的?
- r - 用 ts.plot - R 改变轴
- java - hasNextInt(); java中的方法有默认值吗?
- arduino - 使用瞬时按钮的双稳态单按钮切换,保持时不连续切换
- javascript - 使用 socket.io 时如何访问已登录的用户?
- atom-editor - 当光标位于开始或结束时,Atom Editor 主题会更改大括号的颜色