【发布时间】:2018-08-02 03:09:06
【问题描述】:
我有一个如下所示的存储过程:
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 中运行存储过程,我会得到我的结果。
感谢您的帮助。
【问题讨论】:
-
我猜有些属性应该是 int...
-
“字符串”不应该接受数据库中的所有类型吗?
-
曾经尝试在 c# 中将 int 隐式转换为字符串? (提示:不可能)
-
嗯……你说得对。我会试试的。
-
旁注:您应该不为您的存储过程使用
sp_前缀。微软有reserved that prefix for its own use (see Naming Stored Procedures),你确实会在未来某个时候冒着名称冲突的风险。 It's also bad for your stored procedure performance。最好只是简单地避免sp_并使用其他东西作为前缀 - 或者根本不使用前缀!
标签: c# sql-server asp.net-web-api stored-procedures