2011-06-13 59 views
6

我试图从SQL Server表中返回rowcount。 '网上的多个来源显示下面是一个可行的方法,但它继续返回'0行'。当我在management studio中使用该查询时,它工作正常并正确返回rowcount。我只用简单的表名以及管理工作室倾向于喜欢的完全合格的名称来尝试它。C#'select count'sql命令错误地从sql server返回零行

  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()); 
      } 

什么可能会导致它的任何建议?

+0

'noprimarykey2'是表格还是视图?我之所以问,是因为它可能是一个视图,由当前用户过滤数据。 – 2011-06-13 02:44:53

+0

这是一张桌子,我为了清晰起见将它重新命名。谢谢 – Glinkot 2011-06-13 02:46:09

+0

@Glinkot - 你确定你连接到Management Studio和代码中的同一个SQL Server实例? – 2011-06-13 02:48:19

回答

4

设置你的CommandType为文本

command.CommandType = CommandType.Text 

更多详细信息 from Damien_The_Unbeliever评论,关于.NET是否默认SqlCommandTypes键入Text。

如果你在SqlCommand上拆分CommandType的getter,你会发现有奇怪的特殊外壳在进行,如果该值当前为0,则说明它是Text/1而不是(同样,组件/设计角度,默认值列为1)。但实际的内部值保留为0.

7

以下是我会写:

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()); 
    } 
} 
1

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

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' 
+0

很有可能,但是如果你解释为什么这样更好会有帮助吗?比我使用COUNT()更好吗? – 2015-02-05 14:30:08