Je prévois de faire un projet en utilisant Mono et SQLite comme base de données. Le développement doit être fait principalement sur un Mac. J'ai installé avec succès Mono et testé System.Data.SQLite (dll géré). Les applications de test simples fonctionnent parfaitement.Mono sur OS X: System.Data.SQLite ne fonctionne pas
Toutefois, lorsque j'ai essayé d'utiliser DataTable
dans mon code, il génère une exception d'exécution. Voici l'extrait de code:
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);
}
}
Le code ci-dessus se construit avec succès, mais ne fonctionne pas sur ma machine de développement et donne la sortie suivante sur le terminal.
La sortie quand je lance l'application est comme ci-dessous:
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
J'ai été surpris de voir que le même exécutable ci-dessus fonctionne parfaitement sous Windows, mais échouait sur ma machine de développement.
En cherchant sur Internet, j'ai trouvé que ce problème devait faire quelque chose avec la bibliothèque dynamique sqlite et devait être compilé avec SQLITE_ENABLE_COLUMN_METADATA. J'ai aussi essayé de compiler sqlite avec SQLITE_ENABLE_COLUMN_METADATA. Je ne sais pas où mettre le compilé libsqlite3.0.dylib
.
Toute aide sera appréciée.
Bienvenue à SO! Ceci est une question bien écrite pour un premier demandeur. Je pointe mon bonnet vers toi. – Amy
Hey merci pour l'appréciation lnuyasha. – nayaab
Où avez-vous téléchargé la bibliothèque gérée? J'essaie de trouver un endroit pour le télécharger sur le mac mais n'en trouve pas. –