2014-01-20 60 views
0

如何從數據庫中獲取表的總數量? 我的代碼如下:SQLite從數據庫中獲取表的數量

string sDatabasePath = DBPath(); 
SQLiteConnectionStringBuilder datasource = new SQLiteConnectionStringBuilder(); 
datasource.Add("Data Source", sDatabasePath); 
datasource.Add("Version", "3"); 
datasource.Add("New", "False"); 
datasource.Add("Compress", "True");    
//int nTables; 
using (SQLiteConnection connection = new SQLiteConnection(datasource.ConnectionString)) 
{ 
    connection.Open(); //opens connection 
    SQLiteCommand command = new SQLiteCommand("Select Count(*) FROM sqlite_master where type='table' as nTables;"); 
    //SqlCommand comm = new SqlCommand("SELECT COUNT(*) FROM sqlite_master where type='table'", connection); 
    Int32 nTables = (Int32) comm .ExecuteScalar(); //this query raises error Specified cast is not valid. 
    connection.Close(); // closes the connection 
}  

回答

1

的的ExecuteScalar()方法返回一個值。這將用於返回計算結果。如請求COUNT。

cmd.ExecuteScalar(); 

返回的值是結果的對象。

你可以做的是嘗試以下的方法來轉換爲int32

object result = cmd.ExecuteScalar(); 
int nTables = Convert.ToInt32(result); 
+0

謝謝Jigar,你的代碼工作。另外,我不需要聲明對象結果(雖然這對我來說更清楚)。它也可以直接說int nTables = Convert.ToInt32(cmd.ExecuteScalar()); –

0

您的SQL語法有一些問題:

Select Count(*) FROM sqlite_master where type='table' as nTables); 

應該如

Select Count(*) as nTables FROM sqlite_master where type='table'; 

as nTables是沒有道理的,有一個額外的),並"沒有結束。最後一個可能只是發佈該問題的一個問題,因爲這也將是無效的C#語法。

此外,當詢問您的代碼問題時,將問題本身的特定錯誤包含在內總是有幫助的。

+0

Laalto嗨。發佈後不久,我添加了錯誤說明。我試過你發給我的代碼,它仍然給出錯誤:System.InvalidCastException:指定的轉換無效。 –

+0

如果我將下一行更改爲comm.ExecuteScalar();而不是nTables =(Int32)comm.ExecuteScalar(),沒有錯誤,但表的數量是零而不是4. –

0

嘗試這種情況:

SELECT COUNT(*) FROM sqlite_master WHERE type='table'; 
+0

謝謝。它給錯誤:System.Data.SQLite.SQLiteException:SQL邏輯錯誤或缺少數據庫 沒有這樣的表:sqlite_master.tables –

+0

我已經更新了我的答案。現在檢查 – Vishal

+0

您好Farzi。 「連接」包含所有的數據庫細節(名稱和路徑),我可以很好地運行其他查詢。我嘗試用我的數據庫名稱替換數據庫名稱,有或沒有擴展名,它仍然不起作用 - 我得到錯誤System.Data.SQLite.SQLiteException:SQL邏輯錯誤或缺少數據庫 沒有這樣的表:sDatabasePath.sqlite_master –