System.EntryPointNotFoundException: Unable to find an entry point named 'sqlite3_column_origin_
16lz
2021-01-24
System.EntryPointNotFoundException: Unable to find an entry point named 'sqlite3_column_origin_name' in 'sqlite3'
运行在android真机上后使用读取sqlite出现以上错误
最后发现是在android里libsqlite.so不包含对sqlite3_column_origin_name()方法的支持,所以在使用System.Data.DataTable会出现问题,应该是我使用的版本过低的情况,可以使用最新版的尝试.
不过我使用了另一种方法
我修复之前是使用了这种方法来返回一个DataTable
public DataTable QueryDataSet(string queryString) { DataSet ds = new DataSet(); try { lock (this) { Open(); SqliteDataAdapter da = new SqliteDataAdapter(queryString, _dbConnection); //SqliteConnection _dbConnection; 当前使用数据库连接定义 da.Fill(ds); } } catch (Exception ex) { Debug.LogError(ex); Debug.LogError("此时是错误的数据指令为:" + queryString); } finally { AutoClose(); } if (ds.Tables.Count <= 0) { return new DataTable(); } return ds.Tables[0]; }
现在只能去舍弃SqliteDataAdapter来自己构造一个DataTable来避免sqlite3_column_origin_name()
public DataTable QueryDataSet(string queryString) { //DataSet ds = new DataSet(); DataTable dt = null; try { lock (this) { Open(); //SqliteDataAdapter da = new SqliteDataAdapter(queryString, _dbConnection); //da.Fill(ds); using (SqliteCommand dbCommand = _dbConnection.CreateCommand()) { dbCommand.CommandText = queryString; using (SqliteDataReader dataReader = dbCommand.ExecuteReader()) { dt = ToTable(dataReader); } } } } catch (Exception ex) { Debug.LogError(ex); Debug.LogError("此时是错误的数据指令为:" + queryString); } finally { AutoClose(); } return dt; } private DataTable ToTable(SqliteDataReader reader) { DataTable dt = new DataTable(); for(int i = 0; i < reader.FieldCount; i++) { string name = reader.GetName(i); Type t = reader.GetFieldType(i); dt.Columns.Add(reader.GetName(i),t); } while (reader.Read()) { DataRow dr = dt.NewRow(); for (int i = 0; i < dt.Columns.Count; i++) { if (reader.IsDBNull(i)) { dr[i] = DBNull.Value; continue; } object val = reader[i]; if(val.GetType()!= dt.Columns[i].DataType) { val = Convert.ChangeType(val,dt.Columns[i].DataType); } dr[i] = val; } dt.Rows.Add(dr); } return dt; }
经过测试使用此方法没有问题
更多相关文章
- android标题栏进度圈使用方法
- Android重写onOreate,onPause,onStop等方法时需要注意的问题!
- XML解析
- android 比较有用的方法总结
- 【Android(安卓)开发教程】WebView
- android 设置LinearLayout,RelativeLayout等等layout的高和宽
- Android(安卓)View(四)-View相关属性详解
- 反编译Android部署程序
- 一些android错误