C# 从存储过程输出整数时SQL Server中的强制转换错误
我有一个存储过程,它只输出一个整数C# 从存储过程输出整数时SQL Server中的强制转换错误,c#,sql-server,C#,Sql Server,我有一个存储过程,它只输出一个整数 ALTER PROC GetPendingReservations AS BEGIN SELECT COUNT(DISTINCT FacilityAndAmenityId ) FROM [Property].[PropAndAmenReservation] with(nolock) WHERE IsGranted = 'False' AND CAST(StartDate
ALTER PROC GetPendingReservations
AS
BEGIN
SELECT
COUNT(DISTINCT FacilityAndAmenityId )
FROM
[Property].[PropAndAmenReservation] with(nolock)
WHERE
IsGranted = 'False'
AND CAST(StartDate AS DATE) = CAST(GetDate() AS DATE)
AND FacilityAndAmenityId NOT IN (SELECT FacilityAndAmenityId
FROM [Property].[PropAndAmenReservation] with(nolock)
WHERE IsGranted = 'True'
AND CAST(StartDate AS DATE) = CAST(GetDate() AS DATE))
END
我通过这个在我的web api中调用它
[HttpGet]
[Route("api/getfacilitiesreservation")]
public int GetFacilitiesReservation()
{
using(var db = new ApplicationDbContext())
{
try
{
const string query = "GetPendingReservations";
var count = db.Database.SqlQuery<int>(query);
return count;
}
catch(Exception ex)
{
return 0;
}
}
}
[HttpGet]
[路线(“api/getfacilitiesreservation”)]
public int GetFacilitiesReservation()
{
使用(var db=new ApplicationDbContext())
{
尝试
{
常量字符串query=“GetPendingreervations”;
var count=db.Database.SqlQuery(查询);
返回计数;
}
捕获(例外情况除外)
{
返回0;
}
}
}
但是我在catch异常中得到了这个错误:
从物化的“System.Int32”类型到“System.String”类型的指定强制转换无效
如果我使用db.Database.SqlQuery(query)
,我得到的是:
你能告诉我怎么走吗?谢谢你。 < P>在你的问题中要考虑的一些事情: 1)
SELECT COUNT()
query返回一个提及行总数的标量整数
2) 用于执行原始SQL查询的Database.SqlQuery
返回实现IEnumerable
集合的实例,并期望迭代在其中获取值
根据这些注意事项和方法返回类型int
,您应该像下面这样返回查询结果的单个值:
using (var db = new ApplicationDbContext())
{
try
{
const string query = "GetPendingReservations";
// First(), FirstOrDefault() or SingleOrDefault() may also be used
return db.Database.SqlQuery<int>(query).Single();
}
catch (Exception ex)
{
// exception handling
}
}
使用(var db=new ApplicationDbContext())
{
尝试
{
常量字符串query=“GetPendingreervations”;
//也可以使用First()、FirstOrDefault()或SingleOrDefault()
返回db.Database.SqlQuery(query.Single();
}
捕获(例外情况除外)
{
//异常处理
}
}
类似的问题:那些“with(nolock)”是个坏主意…db.Database.SqlQuery(query).ToString();所以它是一个字符串。为什么先生?我可以删除它,但我认为它不能解决我的问题。即使我将其更改为,我仍然会得到相同的错误。如果您只需执行
返回db.Database.SqlQuery(query)怎么办
?非常感谢。这比我想到的好多了!