Я создал оболочку C# для sqlite и с ее помощью пытаюсь выполнить запрос create и insert . Мне нужно использовать существующее соединение sqlite, поэтому я написал функцию GetDbHandleFromConnection , чтобы получить dbHandle
.
Это соединение с конвертером DbHandle;
public static IntPtr GetDbHandleFromConnection(SqliteConnection conn)
{
var sqlFieldValue = typeof(SqliteConnection)
.GetField("_sql", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
.GetValue(conn);
var inner_sqlFieldValue = sqlFieldValue.GetType()
.GetField("_sql", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
.GetValue(sqlFieldValue);
var handleFieldValue = inner_sqlFieldValue.GetType()
.GetField("handle", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public)
.GetValue(inner_sqlFieldValue);
return (IntPtr)handleFieldValue;
}
Вот где я это называю; Приложение останавливается при выполнении создания таблицы, и я не могу найти ошибку.
public void Process()
{
SqliteConnection connection = new SqliteConnection("Data Source=" + DB_PATH + ";Pooling=False;");
connection.Open();
var dbHandle = GetDbHandleFromConnection(connection); // get DBhandle
IntPtr err = IntPtr.Zero;
// application stops here, without error;
var x = UnsafeSqliteNativeMethods.sqlite3_exec(dbHandle, Encoding.UTF8.GetBytes("create table boo (id int, name varchar(255))"), IntPtr.Zero, IntPtr.Zero, out err);
var y = UnsafeSqliteNativeMethods.sqlite3_exec(dbHandle, Encoding.UTF8.GetBytes("insert into boo values (1, 'Bob')"), IntPtr.Zero, IntPtr.Zero, out err);
connection.Close();
}
Окно вывода:
Не могу использовать GetDbHandleFromConnection для преобразования SqliteConnection
и использования его в качестве DbHandle
? или есть какая-то проблема в функции GetDbHandleFromConnection ?
Ценю вашу помощь!