C#’select count’sql命令错误地从sql server返回零行

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

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

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

将CommandType设置为Text

 command.CommandType = CommandType.Text 

Damien_The_Unbeliever评论的更多细节 ,关于.NET是否默认SqlCommandTypes键入Text。

如果你在SqlCommand上拆开CommandType的getter,你会发现有一些奇怪的特殊shell,如果该值当前为0,它就会出现并表示它是Text / 1(类似地,从组件/设计的角度来看) ,默认值列为1)。 但实际内部值保留为0。

这是我写的方式:

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

您可以使用此更好的查询:

 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'