4

我使用 SQLite.Net 在 Visual Studio 中使用控制台应用程序为我的应用程序构建了核心逻辑,我以为我只是能够将 using 语句从

using System.Data.SQLite;

using Mono.Data.Sqlite.dll

这个过程对于其他组件(例如 Json.Net)非常有效。

但是我发现两个 Sqlite dll(SQL 和 Sql)之间的大小写差异。

System.Data.SQLite

SQLiteCommand command = new SQLiteCommand(sql, DbConnection);
SQLiteDataReader reader = command.ExecuteReader(); 

Mono.Data.Sqlite

SqliteCommand command = new SqliteCommand(sql, DbConnection);
SqliteDataReader reader = command.ExecuteReader(); 

它很容易通过全局查找和替换来纠正,但每次我在环境之间切换时都必须这样做,这有点烦人。任何人都可以提出解决方案吗?

4

2 回答 2

4

我通过使用第二个类来抽象数据库调用来解决这个问题。我有两个包含平台特定版本的SQLQuery类的程序集,一个用于 windows 项目,一个用于 monotouch。

我的数据库层只是调用SQLQuery,所以我的调用类似于

SQLQuery q = new SQLQuery("SELECT * FROM foo WHERE bar = @bar");
q.AddParameter("bar", bar);
DataTable dt = q.GetResultsDT();

只要SQLQuery项目中引用了该平台的程序集,这将适用于任一平台。

于 2013-05-22T16:05:05.173 回答
1

解决这个问题的一种方法是定义一个项目常量,然后使用#if块。

您的使用:

#if MONO_SQLITE
using Mono.Data.Sqlite.dll
#else
using System.Data.SQLite;
#endif

你的代码:

#if MONO_SQLITE
    SqliteCommand command = new SqliteCommand(sql, DbConnection);
    SqliteDataReader reader = command.ExecuteReader(); 
#else
    SQLiteCommand command = new SQLiteCommand(sql, DbConnection);
    SQLiteDataReader reader = command.ExecuteReader();
#endif

根据您使用的是 Mono 还是 .Net 堆栈,您只需在MONO_SQLITE项目中添加或删除常量定义。

Mono C# 编译器还定义了符号__MonoCS__. 我不知道 MonoTouch 是否这样做,但如果这样做,您也可以这样做:

#if __MonoCS__
// ... mono stuff
#else
// ... MS stuff
#endif
于 2013-05-22T13:13:54.983 回答