Tôi đang lên kế hoạch thực hiện một dự án bằng cách sử dụng Mono và SQLite làm cơ sở dữ liệu. Phát triển sẽ được thực hiện chủ yếu trên máy Mac. Tôi đã thiết lập thành công Mono và kiểm tra System.Data.SQLite (dll quản lý). Các ứng dụng thử nghiệm đơn giản hoạt động hoàn hảo.Mono trên OS X: System.Data.SQLite không hoạt động
Tuy nhiên, khi tôi cố gắng sử dụng DataTable
trong mã của mình, nó sẽ ném ngoại lệ thời gian chạy. Sau đây là đoạn mã:
public static void Main (string[] args)
{
string connectionString = "Data Source=emp.db";
try {
using (SQLiteConnection conn = new SQLiteConnection(connectionString))
{
string query = "SELECT firstname, lastname FROM employees";
using (SQLiteCommand comm = new SQLiteCommand(query, conn))
{
conn.Open();
comm.CommandText = query;
using (SQLiteDataReader reader = comm.ExecuteReader())
{
while (reader.Read())
{
string firstname = reader.GetString(0);
string lastname = reader.GetString(1);
Console.WriteLine("Name: " + firstname + " " + lastname);
}
DataTable dt = new DataTable();
dt.Load(reader); // line 39 where problem occurs
}
}
}
} catch (Exception e) {
Console.WriteLine(e);
}
}
Mã trên được tạo thành công nhưng không chạy trên máy phát triển của tôi và cung cấp đầu ra sau trên thiết bị đầu cuối.
Sản lượng khi tôi chạy các ứng dụng như sau:
Name: John Doe
Name: Eric Smith
System.EntryPointNotFoundException: sqlite3_column_origin_name
at (wrapper managed-to-native) System.Data.SQLite.UnsafeNativeMethods:sqlite3_column_origin_name (intptr,int)
at System.Data.SQLite.SQLite3.ColumnOriginalName (System.Data.SQLite.SQLiteStatement stmt, Int32 index) [0x00000] in <filename unknown>:0
at System.Data.SQLite.SQLiteDataReader.GetSchemaTable (Boolean wantUniqueInfo, Boolean wantDefaultValue) [0x00000] in <filename unknown>:0
at System.Data.SQLite.SQLiteDataReader.GetSchemaTable() [0x00000] in <filename unknown>:0
at System.Data.Common.DataAdapter.BuildSchema (IDataReader reader, System.Data.DataTable table, SchemaType schemaType, MissingSchemaAction missingSchAction, MissingMappingAction missingMapAction, System.Data.Common.DataTableMappingCollection dtMapping) [0x0003b] in /private/tmp/monobuild/build/BUILD/mono-2.10.6/mcs/class/System.Data/System.Data.Common/DataAdapter.cs:284
at System.Data.DataTable.Load (IDataReader reader, LoadOption loadOption) [0x0001f] in /private/tmp/monobuild/build/BUILD/mono-2.10.6/mcs/class/System.Data/System.Data/DataTable.cs:2853
at System.Data.DataTable.Load (IDataReader reader) [0x00011] in /private/tmp/monobuild/build/BUILD/mono-2.10.6/mcs/class/System.Data/System.Data/DataTable.cs:2838
at SQLiteApp.MainClass.Main (System.String[] args) [0x00086] in /Users/nayaabkhan/Projects/SQLiteApp/SQLiteApp/Main.cs:37
Tôi rất ngạc nhiên khi thấy rằng cùng thực thi trên làm việc hoàn hảo dưới cửa sổ, nhưng đã thất bại trên máy phát triển của tôi.
Tìm kiếm trên internet, tôi thấy rằng vấn đề này phải làm điều gì đó với thư viện động sqlite và phải được biên dịch bằng SQLITE_ENABLE_COLUMN_METADATA. Tôi đã cố gắng biên dịch sqlite với SQLITE_ENABLE_COLUMN_METADATA. Tôi không biết nơi để đặt các biên dịch libsqlite3.0.dylib
.
Mọi trợ giúp sẽ được đánh giá cao.
Chào mừng bạn đến với SO! Đây là câu hỏi được viết tốt cho người hỏi lần đầu. Tôi tip nắp ca-pô của tôi cho bạn. – Amy
Xin cảm ơn vì đã đánh giá cao lnuyasha. – nayaab
Bạn đã tải xuống thư viện được quản lý ở đâu? Tôi đang cố gắng tìm một nơi để tải xuống trên máy Mac nhưng không thể tìm thấy bất kỳ địa điểm nào. –