Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 从存储过程输出整数时SQL Server中的强制转换错误_C#_Sql Server - Fatal编程技术网

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)怎么办
?非常感谢。这比我想到的好多了!