2012-10-13 87 views
1

我想檢查一個表是否存在於Microsoft SQL Server中,但不知何故我使用的函數總是返回它不存在,並且輸出沒有指定一個異常被拋出。Microsoft SQL Server CE檢查表是否存在

這發生在我創建表(這是預期的)和創建表(這不是預期的)之前。

這是我使用的功能:

/// <summary> 
/// Checks if a certain Sql Server Table exists 
/// </summary> 
/// <param name="_databasename">The name of the database</param> 
/// <param name="_password">The password of the database</param> 
/// <param name="_tablename">The name of the table to check</param> 
/// <returns> 
///  'true' if table exists 
///  'false' if table not exists or if an exception was thrown 
/// </returns> 
public Boolean TableExists(String _databasename, String _password, String _tablename) 
{ 
    if (!_databasename.Contains(".sdf")) { _databasename = _databasename + ".sdf"; } 
    try 
    { 
     String connectionString = "DataSource=" + _databasename + "; Password=" + _password; 
     SqlCeConnection conn = new SqlCeConnection(connectionString); 

     if (conn.State==ConnectionState.Closed) { conn.Open(); } 

     using (SqlCeCommand command = conn.CreateCommand()) 
     { 
      command.CommandType = CommandType.Text; 
      command.CommandText = "SELECT * FROM Information_Schema.Tables WHERE TABLE_NAME = '" + _tablename + "'"; 
      Int32 count = Convert.ToInt32(command.ExecuteScalar()); 

      if (count == 0) 
      { 
       Debug.WriteLine("Table " + _tablename + " does not exist."); 
       return false; 
      } 
      else 
      { 
       Debug.WriteLine("Table " + _tablename + " exists."); 
       return true; 
      } 
     } 
    } 
    catch(Exception _ex) 
    { 
     Debug.WriteLine("Failed to determine if table " + _tablename + " exists: " + _ex.Message); 
     return false; 
    } 
} 

有清楚的是我丟失的東西在這裏,但我似乎無法找出那是什麼。

回答

3

ExecuteScalar返回查詢檢索到的第一行的第一列。
假設您的表確實存在,數據庫名稱正確且位於預期位置,則返回的行的第一列來自TABLE_CATALOG(一個nvarchar列)。

Pheraphs你可以嘗試查詢更改爲:

command.CommandText = "SELECT COUNT(*) FROM Information_Schema.Tables " + 
         "WHERE TABLE_NAME = ......."; 

說,我仍然無法解釋爲什麼當您嘗試將轉換爲int的返回值沒有得到一個異常ExecuteScalar .....

+0

這仍然不適用於我。它不斷返回表不存在。 –

+0

然後您應該檢查數據庫名稱。你是否使用Visual Studio並且將sdf文件的Copy Always設置爲true? – Steve

+0

我正在使用SharpDevelop,併爲我的項目使用私有數據庫。至於複製總是;我沒有將它設置爲true,但我不知道它是否默認設置爲true。 –

相關問題