c# - C# 从 SqliteConnection 获取 DbHandle
问题描述
我为 sqlite 创建了一个 C# 包装器,并使用它尝试执行创建和插入查询。我需要使用我现有的 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函数有什么问题吗?
感谢你的帮助!
解决方案
推荐阅读
- javascript - 如何删除chartjs甜甜圈底部的图例
- javascript - 为股票图表中的预配置日期范围添加工具提示 (Highstock)
- tsql - 如何反转表格的内容?
- image - 动态路径在需要反应本机时不起作用
- azure-cognitive-search - 如何使用 azure search REST API 一次发出多个搜索请求?
- angular - mat-table 是空的,没有 errormsg
- angular - 在同一台服务器上部署 Angular 和 laravel(LEMP 堆栈)
- c# - 在 C# 中将总时间转换为分钟
- python - AttributeError:“系列”对象在 Dask 中没有属性“列”
- java - 使用 UnicodeBlock 打印国际象棋符号?