Estoy planeando hacer un proyecto usando Mono y SQLite como la base de datos. El desarrollo se debe hacer principalmente en una Mac. He configurado con éxito Mono y probado System.Data.SQLite (dll administrado). Las aplicaciones de prueba simples funcionan perfectamente.Mono en OS X: System.Data.SQLite no funciona
Sin embargo, cuando traté de usar DataTable
en mi código, arroja una excepción de tiempo de ejecución. A continuación se muestra el fragmento de código:
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);
}
}
El código anterior se construyen con éxito pero no se ejecuta en mi máquina de desarrollo y da la siguiente salida en el terminal.
La salida al ejecutar la aplicación es la siguiente:
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
Me sorprendió ver que el mismo ejecutable anteriormente funcionó a la perfección debajo de las ventanas, pero estaba fallando en mi máquina de desarrollo.
Al buscar en Internet, encontré que este problema tiene que ver con la biblioteca dinámica sqlite y debe compilarse con SQLITE_ENABLE_COLUMN_METADATA. Intenté compilar sqlite con SQLITE_ENABLE_COLUMN_METADATA también. No sé dónde poner el compilado libsqlite3.0.dylib
.
Cualquier ayuda será apreciada.
Bienvenido a SO! Esta es una pregunta bien escrita para una persona que pregunta por primera vez. Te ofrezco mi gorro. – Amy
Hola, gracias por tu aprecio lnuyasha. – nayaab
¿Dónde descargó la biblioteca administrada? Estoy tratando de encontrar un lugar para descargarlo en el Mac pero no puedo encontrar ninguno. –