【问题标题】:C# 'select count' sql command incorrectly returns zero rows from sql serverC#'select count' sql 命令错误地从 sql server 返回零行
【发布时间】:2011-06-14 03:55:47
【问题描述】:

我正在尝试从 SQL Server 表中返回行数。 'net 上的多个来源显示以下是一种可行的方法,但它继续返回'0 行'。当我在管理工作室中使用该查询时,它可以正常工作并正确返回行数。我已经尝试使用简单的表名以及管理工作室倾向于喜欢的完全限定的表名。

            using (SqlConnection cn = new SqlConnection())
            {
                cn.ConnectionString = sqlConnectionString;
                cn.Open();

                SqlCommand commandRowCount = new SqlCommand("SELECT COUNT(*) FROM [LBSExplorer].[dbo].[myTable]", cn);
                countStart = System.Convert.ToInt32(commandRowCount.ExecuteScalar());
                Console.WriteLine("Starting row count: " + countStart.ToString());
            }

有什么可能导致它的建议吗?

【问题讨论】:

  • noprimarykey2 是表还是视图?我问的原因是因为它可能是一个按当前用户过滤数据的视图。
  • command.CommandType = CommandType.Text
  • @hamlin11 - 不是CommandType.Text 默认值吗?
  • @hamlin11 - 这很奇怪。我检查过,当您创建一个没有设置CommandType 的命令时,它已经设置了CommandType.Text。所以答案对我来说没有意义,我真的很想理解...... :)
  • @Alex - 如果你在SqlCommand 上拆开CommandType 的getter,你会发现有一个奇怪的特殊大小写,如果当前值为0,它会说谎并说它是Text/1(类似地,从组件/设计的角度来看,默认值列为1)。但实际内部值保留为 0。

标签: c# .net sql-server


【解决方案1】:

我是这样写的:

using (SqlConnection cn = new SqlConnection(sqlConnectionString))
{
    cn.Open();

    using (SqlCommand commandRowCount
        = new SqlCommand("SELECT COUNT(*) FROM [LBSExplorer].[dbo].[myTable]", cn))
    {
        commandRowCount.CommandType = CommandType.Text;
        var countStart = (Int32)commandRowCount.ExecuteScalar();
        Console.WriteLine("Starting row count: " + countStart.ToString());
    }
}

【讨论】:

    【解决方案2】:

    将您的 CommandType 设置为文本

    command.CommandType = CommandType.Text
    

    更多详情来自Damien_The_Unbeliever 评论,关于 .NET 是否默认 SqlCommandTypes 来键入文本。

    如果你拆开 SqlCommand 上 CommandType 的 getter,你会发现有一个奇怪的特殊大小写,如果值当前为 0,它说谎并说它是 Text/1(类似地,来自组件/design 角度,默认值列为 1)。但实际内部值保留为0。

    【讨论】:

      【解决方案3】:

      您可以使用这个更好的查询:

      SELECT OBJECT_NAME(OBJECT_ID) TableName, st.row_count
      FROM sys.dm_db_partition_stats st
      WHERE index_id < 2 AND OBJECT_NAME(OBJECT_ID)=N'YOUR_TABLE_NAME'
      

      【讨论】:

      • 很有可能,但如果您解释一下为什么这样会更好,会很有帮助?比我假设的使用 COUNT() 更好?
      猜你喜欢
      • 1970-01-01
      • 2023-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-10
      • 2022-10-14
      • 1970-01-01
      相关资源
      最近更新 更多