2011-06-13 73 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