Tag: sqlite

SQLite参考警告处理器不匹配

我刚刚从SQL服务器改为SQLite,一切都很顺利,一切都运行正常,唯一困扰我的是我收到一条警告,指出与SQLite引用的不匹配,在警告信息下方: 警告1正在构建的项目的处理器体系结构“MSIL”与参考“System.Data.SQLite,Version = 1.0.84.0,Culture = neutral,PublicKeyToken = db937bc2d44ff139,processorArchitecture = x86”的处理器体系结构不匹配,“x86”。 这种不匹配可能会导致运行时故障。 请考虑通过Configuration Manager更改项目的目标处理器体系结构,以便在项目和引用之间调整处理器体系结构,或者使用与项目的目标处理器体系结构相匹配的处理器体系结构依赖于引用。 LivePigeonClient 我安装了错误的参考吗? 或者我真的需要将我的应用程序的目标设置为x86吗? 因为那不是我想要的,有没有人有什么建议可以做什么,摆脱这个警告? 谢谢你的时间!

Visual Studio C# – 找不到SQLite.Interop.dll

我目前正在尝试使用Visual Studio创建一个使用SQLite的C#应用​​程序。 我使用NuGet为我的程序安装了SQLite,并且在解决方案资源管理器(System.Data.SQLite,System.Data.SQLite.EF6,System.Data.SQLite.Linq)中出现了三个引用。 当我在VS中执行我的应用程序时,一切正常。 但是,每当我发布它(使用ClickOnce)并尝试运行应用程序时,它都会崩溃并出现以下错误: System.DllNotFoundException:无法加载DLL“SQLite.Interop.dll”:找不到指定的模块(HRESULTexception) :0x8007007E) 经过一些研究,我在Debug文件夹中找到了这个dll并将其复制到我的程序的“.exe”版本的文件夹中(在发布并执行“setup.exe”之后)。 这样,应用程序运行良好。 但我对这个解决方案并不满意,因为它看起来很脏。 我不希望将来的用户在安装我的应用程序时必须手动执行此操作! 因此,我的问题是:我该怎么做才能确保这个dll与我的程序一起安装? 注意:我尝试了这篇文章的第一个答案: 无法加载dll sqlite interop dll WPF但我似乎没有为我工作。 谢谢 !

C#时间线控制

我有一个SQLite数据库支持快速搜索和日志访问。 我现在正在设计如何选择日志视图的日期范围。 我正在考虑一个图形时间轴,可以通过鼠标导航,具有缩放function,以便您可以根据需要钻取到小时/分钟跨度,或者如果缩放function太复杂(那么只需要一个文本框)显示时间线的开始和结束日期。 有不同的日志消息类型(5或6),我想在时间轴上用不同的颜色指示每种类型 这在视觉上非常好看: www.codeproject.com/KB/wtl/wtltimeline.aspx AC(.net)版本(开源)或类似版本会很棒。 有人有他们会推荐的东西吗? 我希望避免从头开始编写自己的控件。 请求帮助。 谢谢!

如何在SQLite查询中使用带有参数的Like运算符?

我可以通过在LINQPad中输入这个来获得我期望的结果: SELECT * FROM WorkTable WHERE WTName LIKE “DSD__20090410014953000%” (它显示了WTName值为DSD__20090410014953000.xml的记录“) 但尝试以编程方式执行此操作certificate是尝试。 我试过了: const string qry = “SELECT SiteNum FROM WorkTable WHERE WTName LIKE @wtName%”; using (SQLiteConnection con = new SQLiteConnection(HHSUtils.GetDBConnection())) { con.Open(); SQLiteCommand cmd = new SQLiteCommand(qry, con); cmd.Parameters.Add(new SQLiteParameter(“wtName”, tableName)); siteNum = Convert.ToInt32(cmd.ExecuteScalar()); } …但它会导致应用程序崩溃,我的日志文件告诉我原因: Message: From application-wide exception handler: System.Data.SQLite.SQLiteException: SQL logic error […]

DbContext不会发布SQLite数据库

首先,这些是我的意图: 在SQLite上创建一个DbContext 读/写它 关闭背景 将文件移动到另一个位置 1-3点工作完美。 当我尝试移动数据库时,问题就开始了。 我得到一个错误说明: ‘The process cannot access the file because it is being used by another process.’ 我该如何解决这个问题? 首先,我创建一个上下文。 我必须在几种方法中使用它,我不想在每次需要时创建它。 所以我将它存储为成员。 _sqliteContext = new SqlLiteContext(sqliteContextName); 然后我想访问一个名为sync的表并获取其最新条目。 var sync = _sqliteContext.Syncs.OrderByDescending(s => s.Date); _lastSync = sync.Any() ? sync.First().Date : new DateTime(0); 而已。 然后我关闭上下文。 _sqliteContext.Dispose(); 并尝试移动文件。 File.Move(sqliteUploadLocation, sqliteDownloadLocation); 这是我得到例外的地方。 当我用插入替换选择时,如下所示: var sync […]

SQLite.Interop无法在清除解决方案时删除文件

我在MVC Web应用程序中使用Nuget包System.Data.SQLite 。 当我尝试清理解决方案并重建时,似乎存在锁定问题。 我得到的错误消息是: Unable to delete file “bin\x64\SQLite.Interop.dll”. Access to the path ‘\bin\x64\SQLite.Interop.dll’ is denied. Unable to delete file “bin\x64\SQLite.Interop.dll”. Access to the path ‘\bin\x64\SQLite.Interop.dll’ is denied. 我认为数据库仍处于打开状态或.dll仍在使用中,但我找不到任何文档或对同一问题的任何引用。 这个问题似乎是一个类似的问题,但没有解决我的问题。 这是我用来写入SQLite数据库的代码片段: var conn = new SQLiteConnection(“Data Source=” + connectionString); conn.Open(); var debugEntriesTableQuery = “CREATE TABLE …”; var cmd = conn.CreateCommand(); cmd.CommandText = debugEntriesTableQuery; cmd.ExecuteNonQuery(); […]

无法从WP8上的SD卡上的SQLite DB中检索数据

我在控制台应用程序中使用System.Data.SQLite创建了一个SQLite数据库。 然后我把它移到了Windows Phone的SD卡上。 我按照这些说明为我的WP8应用添加了SQLite支持: https : //github.com/peterhuene/sqlite-net-wp8 我找到了DB文件并打开它,如下所示: ExternalStorageFile file = null; IEnumerable storageDevices = await ExternalStorage.GetExternalStorageDevicesAsync(); foreach (ExternalStorageDevice storageDevice in storageDevices) { try { file = await storageDevice.GetFileAsync(“northisland.nztopomap”); } catch { file = null; } if (file != null) break; } SQLiteConnection conn = new SQLiteConnection(“Data Source=” + file.Path + “;Version=3;Read Only=True;FailIfMissing=True;”); SQLiteCommand command […]

同时使用entity framework与SQL Server和SQLite数据库

我有一个用于测试目的的C#.Net 4.0控制台应用程序(使用VS 2012)。 我的目标是能够创建一个可以在MS SQL Server数据库和SQLite数据库上使用的单个Entity Framework .edmx文件。 基本上,我想使用相同的实体模型类和集合进行查询,但很容易就能随意在两个不同的数据库之间切换。 到目前为止,我已经通过连接到MS Server数据库并添加了我的单个测试表(称为Contact)来创建我的.edmx文件。 有了这个,我可以使用以下代码从我的表中获取数据: var db = new DataAccess.ContactTestEntities(); foreach (var contact in db.Contacts) Console.WriteLine(“” + contact.ID + “. ” + contact.FirstName + ” ” + contact.LastName); 现在,我希望能够使用相同的代码,而是连接到SQLite数据库。 我编写了一个部分类,允许我更改contruction上的连接字符串,如下所示: var db = new DataAccess.ContactTestEntities(“MY SQLITE CONNECTION STRING”); 它在这方面工作正常,除了在尝试查询数据库时我收到此错误: 无法将类型为“System.Data.SQLite.SQLiteConnection”的对象强制转换为“System.Data.SqlClient.SqlConnection”。 我试图找到解决方案,但已经走到了尽头,我正在努力寻找下一步。 这就是我的问题 :我怎样才能解决这个问题? 或者我可以采取另一种方法来获得相同的预期结果? 堆栈跟踪以上exception: 处于System.Data.Ents.Clmand.AntityClient.EntityCommandDefinition.ExecuteStoreCommands的System.Data.Common.Utils.CommandHelper.SetStoreProviderCommandState(EntityCommand entityCommand,EntityTransaction entityTransaction,DbCommand […]

使用C#SQLite DataReader和附加数据库迭代结果的性能问题

我在我的C#项目中使用System.Data.SQLite和SQLiteDataReader 。 在使用附加数据库获取查询结果时,我遇到了性能问题。 以下是将文本搜索到两个数据库的查询示例: ATTACH “db2.db” as db2; SELECT MainRecord.RecordID, ((LENGTH(MainRecord.Value) – LENGTH(REPLACE(UPPER(MainRecord.Value), UPPER(“FirstValueToSearch”), “”))) / 18) AS “FirstResultNumber”, ((LENGTH(DB2Record.Value) – LENGTH(REPLACE(UPPER(DB2Record.Value), UPPER(“SecondValueToSearch”), “”))) / 19) AS “SecondResultNumber” FROM main.Record MainRecord JOIN db2.Record DB2Record ON DB2Record.RecordID BETWEEN (MainRecord.PositionMin) AND (MainRecord.PositionMax) WHERE FirstResultNumber > 0 AND SecondResultNumber > 0; DETACH db2; 使用SQLiteStudio或SQLiteAdmin执行此查询时,此工作正常,我在几秒钟内得到结果(记录表可以包含数十万条记录,查询返回36000条记录)。 在我的C#项目中执行此查询时,执行也需要几秒钟,但运行所有结果需要几个小时。 这是我的代码: // Attach […]

System.Data.SQLite不支持多个事务

所以我在System.Data.SQLite和使用多个事务时遇到了一个有趣的问题。 基本上我有以下代码失败: using (IDbConnection connection1 = new SQLiteConnection(“connectionstring”), connection2 = new SQLiteConnection(“connectionstring”)) { connection1.Open(); connection2.Open(); IDbTransaction transaction1 = connection1.BeginTransaction(); IDbTransaction transaction2 = connection2.BeginTransaction(); // Fails! using(IDbCommand command = new SQLiteCommand()) { command.Text = “CREATE TABLE artist(artistid int, artistname text);”; command.CommandType = CommandType.Text; command.Connection = connection1; command.ExecuteNonQuery(); } using (IDbCommand command = new SQLiteCommand()) { command.Text […]