2011-08-22 70 views
1

我有一個應用程序可以保存並打開數據(保存爲SQL CE數據庫文件)。每次保存項目時,都會生成一個新的.sdf文件,其中包含由我的代碼定義的表結構,我不需要對其執行任何驗證。在打開之前驗證數據庫文件模式

我的問題是,當用戶導入(打開)OpenFileDialog中的.sdf文件時,用戶可能會選擇由不同應用程序(即具有不同表格模式)生成的數據庫文件。我需要驗證導入數據庫表模式,或者如果打開並處理錯誤的數據庫文件,應用程序可能會崩潰。

我不需要比較文件之間的模式。我需要的只是檢查數據庫文件是否包含某個表結構或表名(我認爲這應該足以滿足我的目的)。什麼是最簡單的方法來做到這一點?

[編輯]

我用下面的方法來驗證數據庫文件,它的工作原理。我使用一個字符串數組來檢查一個SqlCeDataReader(它存儲了表名)。它的工作原理,但我不知道是否有一個更簡單的方法 - 在.NET中使用方法的構建?

using (SqlCeConnection conn = new SqlCeConnection(validateConnStr)) 
{ 
    using (SqlCeCommand cmd = new SqlCeCommand(@"SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES", conn)) 
    { 
     try 
     { 
      conn.Open(); 
      SqlCeDataReader rdr = cmd.ExecuteReader(); 
      string[] tableArr = { "FirstTable", "SecondTable" }; 
      int ta = 0; 
      while (rdr.Read()) 
      { 
       if (rdr.GetString(0) != tableArr[ta]) 
       { 
        isValidDbFile = false; 
       } 
       else 
       { 
        isValidDbFile = true; 
       } 
       ta++; 
      } 
     } 
     catch (Exception ex) 
     { 
      //MessageBox.Show(ex.ToString()); 
     } 
     finally 
     { 
      conn.Close(); 
     } 
    } 
} 
+0

如果你使用的是4.0,你也可以使用GetSchema(「TABLES」),它返回一個帶有表名的DataTable。 – ErikEJ

回答

1

打開數據庫(確保有錯誤處理,因爲用戶可以指向任何文件)。

運行:SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'MyTable」

如果返回的數據,你的表是存在的。

相關問題