首页 > 解决方案 > 如何使用存储过程结果在 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

注意:我使用的是存储过程,因为我返回的数据来自同一服务器上的不同数据库

标签: c#stored-proceduressql-server-2012

解决方案


将 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(),这将导致媒体中出现单行。您是否打算返回一条记录?


推荐阅读