C# SqlCeException:判断表是不是存在的一行 SQL

Posted

技术标签:

【中文标题】C# SqlCeException:判断表是不是存在的一行 SQL【英文标题】:C# SqlCeException: One Line SQL to determine table existsC# SqlCeException:判断表是否存在的一行 SQL 【发布时间】:2011-06-15 18:54:41 【问题描述】:

按照SO Question #167576 中提供的指南,我在我的C# WinForm 应用程序 中构造了以下SQL 查询字符串以确定表RMCoil 是否存在:

using (SqlCeCommand cmd = new SqlCeCommand(null, new SqlCeConnection(Connection))) 
  cmd.Connection.Open();
  cmd.CommandText =
    "IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil') " +
    "SELECT 1 ELSE SELECT 0";
  if (cmd.ExecuteNonQuery() < 1) 
    // code to create table
  

执行非查询会抛出这个SqlCeException

解析查询时出错。 [令牌行号=1,令牌行偏移量=1,错误令牌=IF]

我对 SqlCeServer 还很陌生。有人能告诉我如何在一行中执行这个查询吗?

【问题讨论】:

【参考方案1】:

SELECT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil') 可以解决问题吗? 你还必须做ExecuteScalar() 而不是ExecuteNonQuery() 我认为要检索你的价值......

正如 Paul Sasik 非常明智地指出的那样,以下查询更好:SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil'

【讨论】:

+1 但可能更简单。如果您使用Execute Scalar,那么您的查询可能是:SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil' 如果您得到 0,那么就没有这样的表。如果你得到 1 那么是的。 @Paul 非常正确。我会将其添加到我的答案中。 [+1] 啊!当我最初编写代码时,我曾考虑过ExecuteScalar(),但我想我会先尝试ExecuteNonQuery()。当我得到错误时,我忘记了! 其实保罗SELECT COUNT(*)...每次都返回1,只是所有的值都是NULL 这行得通! "SELECT TABLE_SCHEMA FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil'"【参考方案2】:

这实际上做了一个更好的测试:

SELECT CASE WHEN EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME='RMCoil') THEN 1 ELSE 0 END

【讨论】:

以上是关于C# SqlCeException:判断表是不是存在的一行 SQL的主要内容,如果未能解决你的问题,请参考以下文章

c#,判断2个dataTable是不是一样的问题。。

c#里面怎么判断数据库是不是存在

用C#怎么样判断用户IP地址是否国内的

c#中怎样判断access数据库是不是存在

如果我不向数据库插入数据,则在重新启动时获取 SqlCeException

C# winform treeview 怎麼判断是不是包含某个子节点