Как я могу проверить, существует ли таблица в SQL Server CE 3.5 - PullRequest
2 голосов
/ 11 июня 2011

У меня есть база данных user.sdf в asp.net, я хочу создать таблицы, для которых мне нужно проверить, проверить, сначала убедиться, что они существуют, если не существуют, то не нужно создавать таблицы, иначе создать новую таблицу, как я могупроверьте это, пожалуйста, помогите мне решить эту проблему.

Ответы [ 2 ]

9 голосов
/ 11 июня 2011

Вы можете запросить представления схемы в SQL CE 3.5, посмотрите здесь .

Вот простой метод расширения, который вы можете использовать.

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 голосов
/ 24 февраля 2013

В качестве альтернативы вы можете запросить таблицу и поймать выброшенное исключение.Если есть исключение, таблица не была найдена, иначе таблица существует.

SELECT TOP 1 1 FROM TableName;

Небольшой и простой тест производительности показал лучшие результаты, чем запрос к INFORMATION_SCHEMA.Хотя я бы посчитал Запрос против INFORMATION_SCHEMA более чистым.

...