【问题标题】:Why does my raw query to count rows always returns -1?为什么我计算行数的原始查询总是返回 -1?
【发布时间】:2023-04-04 08:47:02
【问题描述】:

我正在尝试检查表是否存在,但无法正常工作。

由于某种原因,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 的东西或一些实际上返回结果集给你的方法。

标签: c# sql entity-framework


【解决方案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 提供参考。
    猜你喜欢
    • 1970-01-01
    • 2017-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    相关资源
    最近更新 更多