2011-06-11 75 views
2

我有一個數據庫user.sdf在asp.net中,我想創建表我需要檢查它檢查它首先存在不是如果存在然後不需要創建表格,否則創建新表格我該如何檢查它,請幫我解決這個問題。我如何檢查表是否存在SQL Server CE 3.5

+3

你有什麼嘗試過 - 你看過任何文檔,並嘗試過一些例子嗎?請發佈現在正在運行的代碼或者您有問題的代碼。看[問] – Hogan 2011-06-11 14:07:46

回答

9

您可以在SQL CE 3.5中查詢模式視圖,看看here

下面是一個可以使用的簡單擴展方法。

public static class SqlCeExtentions 
{ 
    public static bool TableExists(this SqlCeConnection connection, string tableName) 
    { 
    if (tableName == null) throw new ArgumentNullException("tableName"); 
    if (string.IsNullOrWhiteSpace(tableName)) throw new ArgumentException("Invalid table name"); 
    if (connection == null) throw new ArgumentNullException("connection"); 
    if (connection.State != ConnectionState.Open) 
    { 
     throw new InvalidOperationException("TableExists requires an open and available Connection. The connection's current state is " + connection.State); 
    } 

    using (SqlCeCommand command = connection.CreateCommand()) 
    { 
     command.CommandType = CommandType.Text; 
     command.CommandText = "SELECT 1 FROM Information_Schema.Tables WHERE TABLE_NAME = @tableName"; 
     command.Parameters.AddWithValue("tableName", tableName); 
     object result = command.ExecuteScalar(); 
     return result != null; 
    } 
    } 
} 

如下

using (SqlCeConnection connection = new SqlCeConnection(@"Data Source=MyDatabase1.sdf")) 
{ 
    connection.Open(); 
    if (connection.TableExists("MyTable")) 
    { 
    // The table exists 
    } 
    else 
    { 
    // The table does not exist 
    } 
} 
0

正如你可以查詢表,趕上拋出的異常的替代,您可以使用上面。 如果有例外,表未找到,否則表存在。

SELECT TOP 1 1 FROM TableName; 

有點簡單的性能測試比查詢對INFORMATION_SCHEMA有更好的結果。儘管我會將對INFORMATION_SCHEMA的查詢視爲更清晰。