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的主要内容,如果未能解决你的问题,请参考以下文章