使用String.Format args的SQLite异常 - 语法错误?

时间:2014-02-25 13:24:28

标签: c# sqlite select count

这是我的第一个问题,请原谅我,如果我遗漏了某些东西或做错了什么的话:)

项目
我正在编写一个使用ADO.NET System.Data.SQLite的.NET应用程序(Visual C#2012 Express),其任务是在指定的文件夹中搜索SQLite数据库。之后,您可以从列表视图中选择一个或多个DB,然后将其导出为HTML / CSV。在这种情况下出口意味着:
- 来自数据库的所有数据都被读取(表/列)
- 在最终导出之前,null / empty数据库被删除了 - 在最终导出之前,null /空表被删除了 - 在最终导出之前删除null / empty列

问题
要删除空列,我将对CommandText使用以下SQLite语句:

object validation = null;
query.CommandText = String.Format("SELECT COUNT({0}) FROM {1} WHERE {0} IS NOT NULL AND {0} <> '';", header, table);
validation = query.ExecuteScalar();

不幸的是,这导致ExecuteScalar()在一个数据库上抛出异常,但对其他所有数据库都可以正常工作。

如果我是'单引号'这样的论据......

object validation = null;
query.CommandText = String.Format("SELECT COUNT('{0}') FROM '{1}' WHERE '{0}' IS NOT NULL AND '{0}' <> '';", header, table);
validation = query.ExecuteScalar();

...没有异常,但是其他数据库中的null / empty列不会被删除,因为ExecuteScalar()结果不正确。

EDIT: Table: raw_contacts | Header: sort_key
bei System.Data.SQLite.SQLite3.Prepare(SQLiteConnection cnn, String strSql, SQLiteStatement previous, UInt32 timeoutMS, String& strRemain)
bei System.Data.SQLite.SQLiteCommand.BuildNextCommand()
bei System.Data.SQLite.SQLiteCommand.GetStatement(Int32 index)
bei System.Data.SQLite.SQLiteDataReader.NextResult()
bei System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
bei System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
bei System.Data.SQLite.SQLiteCommand.ExecuteScalar(CommandBehavior behavior)
bei System.Data.SQLite.SQLiteCommand.ExecuteScalar()  

编辑:标题和表格是从字符串[]中的foreach循环收集的字符串。

所以这对我来说就像语法错误一样。如果您需要更多信息或代码,请告诉我 但现在该怎么办?谁能帮我?

谢谢! 本-X

0 个答案:

没有答案