为啥我计算行数的原始查询总是返回 -1?
Posted
技术标签:
【中文标题】为啥我计算行数的原始查询总是返回 -1?【英文标题】:Why does my raw query to count rows always returns -1?为什么我计算行数的原始查询总是返回 -1? 【发布时间】:2014-06-05 06:55:29 【问题描述】:我正在尝试检查表是否存在,但无法正常工作。
由于某种原因,count 总是返回 -1。我已经在数据库中有一个表。它 应该返回 1?
SearchEntities db = new SearchEntities();
var qry3 = "";
var sql4 = "SELECT Count(*) FROM SearchDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'portland'";
var count = db.Database.ExecuteSqlCommand(sql4);
【问题讨论】:
我不熟悉 EF 但ExecuteSqlCommand
就像ExecuteNonQuery
?也许它总是为SELECT
语句返回-1
?
计数显示为您的查询生成的结果集第一行的第一列。我不认为那是 ExecuteSqlCommand
返回的东西 - 你想要类似于 ExecuteScalar
的东西或一些实际上返回结果集给你的方法。
【参考方案1】:
ExecuteSqlCommand
不返回数据,它总是返回一个Int32
,这是当它是一个DDL/DML
命令时,SQL 脚本处理的行数。
你想要SqlQuery<TElement>(String, Object[])
。
var count = db.Database.SqlQuery<int>(sql4).Single();
【讨论】:
【参考方案2】:ExecuteStoreQuery 直接对数据源执行命令。
int result = entity.ExecuteStoreQuery<int>(@"
IF EXISTS (SELECT * FROM sys.tables WHERE name = 'TableName')
SELECT 1
ELSE
SELECT 0
").SingleOrDefault();
查看答案here。
【讨论】:
ObjectContext
虽然仍然可用,但它是一个较旧的 API。现在推荐使用DbContext
API。 ref
感谢@Stijin 提供参考。以上是关于为啥我计算行数的原始查询总是返回 -1?的主要内容,如果未能解决你的问题,请参考以下文章