C# получить DbHandle от SqliteConnection - PullRequest
1 голос
/ 30 апреля 2020

Я создал оболочку 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();
    }

Окно вывода: enter image description here

Не могу использовать GetDbHandleFromConnection для преобразования SqliteConnection и использования его в качестве DbHandle? или есть какая-то проблема в функции GetDbHandleFromConnection ?

Ценю вашу помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...