c# - 使用存储过程时,从具体化的“System.Int32”类型到“System.String”类型的指定转换无效
问题描述
我有一个如下所示的存储过程:
ALTER PROCEDURE [dbo].[sp_SearchUnit]
@UnitName VARCHAR(50)
AS
BEGIN
SELECT
b.NewBuildingId,
b.NewBuildingName,
u.PropertyUnitId,
u.[Owner],
p.FirstName,
p.MiddleName,
p.LastName,
u.ParkingAreaSqMeters,
u.PostingDateTime,
u.TypeOfUnit,
u.UnitName,
u.WithParking
FROM
[Property].[Unit_Rev] AS u
LEFT JOIN
[dbo].[Building_Rev] AS b ON u.BuildingId = b.NewBuildingId
LEFT JOIN
[dbo].[Person] AS p ON u.Owner = p.PersonId
WHERE
u.UnitName LIKE '%'+@UnitName+'%'
END
在我的 Web API 中,我像这样访问这个存储过程:
[HttpPost]
[Route("api/searchunitbyunitname")]
public async Task<List<SearchUnit>> SearchUnitByUnitName()
{
var req = HttpContext.Current.Request;
var unitName = req["unitname"];
const string query = "sp_SearchUnit @UnitName";
using (var db = new PmisDbContext())
{
try
{
object[] parameters =
{
new SqlParameter
{
ParameterName = "@UnitName",
Value = unitName,
Direction = ParameterDirection.Input
}
};
var list = await db.Database.SqlQuery<SearchUnit>(query, parameters).ToListAsync();
return list;
}
catch(Exception ex)
{
return null;
}
}
}
我的“SearchUnit”课程是:
public class SearchUnit
{
public string NewBuildingId { get; set; }
public string NewBuildingName { get; set; }
public string PropertyUnitId { get; set; }
public string Owner { get; set; }
public string FirstName { get; set; }
public string MiddleName { get; set; }
public string LastName { get; set; }
public string ParkingAreaSqMeters { get; set; }
public string PostingDateTime { get; set; }
public string TypeOfUnit { get; set; }
public string UnitName { get; set; }
public string WithParking { get; set; }
}
为什么我会收到此错误:
从具体化的“System.Int32”类型到“System.String”类型的指定转换无效
如果我在 SQL Server Management Studio 中运行存储过程,我会得到我的结果。
感谢您的帮助。
解决方案
有必要确保SqlQuery
声明中使用的所有目标类属性与从数据库中检索的物化数据类型完全相同的数据类型,例如,列名中带有后缀“Id”的数据类型应调整为int
:
public int NewBuildingId { get; set; }
public int PropertyUnitId { get; set; }
对目标类中的所有属性使用数据类型并不是一个好主意,因为在使用方法时string
没有从物化数值数据类型到类型的自动转换。string
Database.SqlQuery<TElement>
推荐阅读
- c++ - 如何在linux中捕获和修改鼠标事件?
- c# - 从 Xamarin 上的 firebase 获取用户时如何按名称排序
- php - 如何将 manifest.json 集成到 wordpress 主题中
- python - TypeError:数据必须是 CUDF 中的列表或类字典
- angular - 使用外部测试套件的角度应用程序的代码覆盖率
- windows - 批处理/MS-Windows-CMD:在 FOR 循环中递增的数字不递增
- node.js - GH Action 要求在 npm install 上进行身份验证
- sql - 创建仅返回行数的存储过程
- c++ - c ++中的链接错误(多个cpp文件)
- python - 为什么我的逻辑回归只产生一个类?