如何检查 SQL Server CE 3.5 中是不是存在表

Posted

技术标签:

【中文标题】如何检查 SQL Server CE 3.5 中是不是存在表【英文标题】:How can I check whether a table exists in SQL Server CE 3.5如何检查 SQL Server CE 3.5 中是否存在表 【发布时间】:2011-06-11 14:03:23 【问题描述】:

我在asp.net中有一个数据库user.sdf,我想创建表,我需要检查它首先检查它是否存在,如果存在则不需要创建表,否则创建新表我怎么能检查它,请帮我解决这个问题。

【问题讨论】:

您尝试过什么——您是否查看过任何文档并尝试了一些示例?请发布现在正在运行或您有疑问的代码。见How to Ask 【参考方案1】:

您可以在 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
  

【讨论】:

【参考方案2】:

作为替代方案,您可以查询表并捕获抛出的异常。 如果有异常,则表未找到,否则表存在。

SELECT TOP 1 1 FROM TableName;

一个小而简单的性能测试比针对 INFORMATION_SCHEMA 的查询有更好的结果。虽然我认为针对 INFORMATION_SCHEMA 的查询更清洁。

【讨论】:

以上是关于如何检查 SQL Server CE 3.5 中是不是存在表的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止 SQL Server CE 3.5 更改跟踪表无限增长?

SQL Server CE 3.5 SP1 存储过程

SQL Server CE 数据库升级 3.5 到 4.0 C#

将 SQL Server CE 数据库 (.sdf) 从 3.5 更新到 4.0

为啥我的 LINQ INSERTS 没有在 SQL Server CE 3.5 中持续存在?

Sql Server CE 3.5 和 .NET Compact Framework 2.0 SP2