【发布时间】:2019-12-09 06:58:26
【问题描述】:
我想从 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 列
注意:我使用的是存储过程,因为我返回的数据来自同一服务器上的不同数据库
【问题讨论】:
-
也许您应该检查“LibraryMediaEntry”表中您用于“标题”列的数据类型
-
您也可以明确指定参数的数据类型。使用“SqlDbType.VarChar”?
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本没有前缀!
标签: c# stored-procedures sql-server-2012