Tag: sqlite3

获取最后插入的ID

我目前正在使用下面的方法来获取最后插入的行的ID。 Database.ExecuteNonQuery(query, parameters); //if another client/connection inserts a record at this time, //could the line below return the incorrect row ID? int fileid = Convert.ToInt32(Database.Scalar(“SELECT last_insert_rowid()”)); return fileid; 到目前为止,这种方法一直很好,但我不确定它是否完全可靠。 假设有两个客户端应用程序,每个应用程序都有自己独立的数据库连接,它们在同一时间调用上面的服务器端方法。 请记住,客户端线程并行运行,并且SQLite一次只能运行一个操作(或者我听说过),一个客户端实例是否可以返回由插入的记录的行ID另一个例子? 最后,是否有更好的方法来获取最后插入的行ID?

Sqlite中的multithreading

我使用System.data.sqlite连接到Sqlite数据库,根据Sqlite文档 ,用户可以通过使用SQLITE_OPEN_NOMUTEX标志作为连接字符串的一部分来启用multithreading。 但我找不到接受标志的连接字符串中的任何键。 它是默认启用的吗? 如果不是我怎么能这样做?

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 […]

带有Metro的SQLite – 无法加载sqlite3.dll

我无法使用我的Metro应用程序使用SQLite创建数据库。 说明:如果加载SQLite3.dll失败,我将继续收到运行时exception。 观察:我发现数据库目录永远不会在应用程序包的LocalState目录中创建。 在观察之后,我逐字地在运行时实现了文件路径创建,并将sqlite3.dll删除到了预期的位置。 然而,我仍然收到一个未能加载SQLite3.dll的exception。 我利用SQLite的CRUD代码编译得很好。 SQLite依赖项(packages.config,SQLite.cs和sqlite3.dll)位于单独的metro类库中,而不是应用程序的可执行项目中。 sqlite3.dll基于ARM处理器。 sqlite3.dll设置为Content,Copy Always。 码: SQLiteAsyncConnection connection = new SQLiteAsyncConnection(DATABASE_DIRECTORY_NAME); return await connection.CreateTableAsync(); 请帮忙…

C#.NET中的SQLite3

我正在尝试在C#.NET中使用SQLite3。 我已经google了一下,发现了一些不同的API。 我还检查了SQLite的网站包装。 我喜欢它们,但是想要编写我自己的包装器而不使用添加的依赖项。 我发现所有不需要添加依赖的包装器都不是免费的。 我想知道如何读取,执行和写入sqlite3数据库。 它是套接字连接(tcp?udp?等?)? 我试过在谷歌搜索这个答案,我得到的只是图书馆特定的答案。 :/ SQLite的网站文档也没什么帮助。 编辑:我在google搜索时也找到了一个COM接口 ,但该库是否具体? 谢谢! 🙂

SQLite尝试编写只读数据库错误

我有一个填充SQLite数据库的控制台应用程序。 当应用程序自行运行时,我不会收到任何错误。 如果我运行应用程序的多个实例,其中每个应用程序都在自己的文件夹中,并且每个应用程序都填充自己的数据库,我偶尔会遇到以下exception: System.Data.SQLite.SQLiteException (0x80004005): Attempt to write a read-only database attempt to write a readonly database at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt) at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt) at System.Data.SQLite.SQLiteDataReader.NextResult() at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave) at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior) at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery() 我知道DB不是只读的,因为它已经将数据写入该数据库。 此外,应用程序继续并将继续将数据填充到该数据库。 当只有一个应用程序实例正在运行时,我没有重现错误。 我已经尝试使用pragma将journal和temp_store都放在内存而不是文件中以防万一在那里可能存在一些争用,但我仍然得到错误。 我总是在同一个方法中得到错误,这是第一次为连接发生插入。 为了大致了解应用程序的作用,它会循环遍历案例,收集有关这些案例的信息(而不是来自SQLite),然后将结果写入SQLite数据库。 我不知道还有什么可以尝试的。 *编辑我也在使用PRAGMA journal_mode = MEMORY。 在将数据插入SQLite数据库时,我首先运行BEGIN语句,然后在END语句之前运行一堆插入。 第一个插入时发生错误。

无法在SQLite Net Platform WinRT中加载DLL的’sqlite3′

我正在使用Xamarin.Forms开发本机应用程序。 但我现在面临的问题与Xamarin无关。 我添加了新的Windows Phone项目 right-click > Add > New Project -> Windows Phone Apps -> Blank App(Windows Phone). 在我在Visual Studio premium 2013中的现有Xamarin项目中。我使用sqlitenet pcl进行数据库连接。 我的项目中有以下代码。 public ISQLitePlatform CreateSqlitePlatformInterface() { return new SQLitePlatformWinRT(); } 当它在行上面执行时,它会抛出exception An exception of type ‘System.DllNotFoundException’ occurred in SQLite.Net.Platform.WinRT.DLL but was not handled in user code Additional information: Unable to load DLL ‘sqlite3’: […]

在C#中从SQL读取BLOB后转换为字节数组

在进行反序列化之前,我需要读取BLOB并将其存储在byte []中; 考虑: //Reading the Database with DataAdapterInstance.Fill(DataSet); DataTable dt = DataSet.Tables[0]; foreach (DataRow row in dt.Rows) { byte[] BinDate = Byte.Parse(row[“Date”].ToString()); // convert successfully to byte[] } 我在这个C#语句中需要帮助,因为我无法将对象类型转换为byte []。 注意,表中的“日期”字段是一个blob而不是Date类型; 帮助赞赏; Soham

如何在不锁定数据库的情况下使用数据读取器执行SQLite查询

我使用System.Data.Sqlite来访问C#中的SQLite数据库。 我有一个查询必须读取表中的行。 在遍历行并且在阅读器打开时,必须执行某些SQL更新。 我遇到了“数据库被锁定”的exception。 SQLite文档说明: 当进程想要从数据库文件中读取时,它遵循以下步骤: 打开数据库文件并获取SHARED锁。 该文档进一步说明了“共享”锁定: 可以读取数据库但不写入。 任意数量的进程可以同时保存SHARED锁,因此可以有许多同时读取器。 但是,当一个或多个SHARED锁处于活动状态时,不允许其他线程或进程写入数据库文件。 FAQ说明: 多个进程可以同时打开同一个数据库。 多个进程可以同时执行SELECT。 但是,只有一个进程可以随时对数据库进行更改。 SQLite权威指南一书指出: …通过使用read_uncommited编译指示,连接可以选择具有读取未提交的隔离级别。 如果将其设置为true ,则连接将不会在其读取的表上放置读锁定。 因此,另一个writer实际上可以更改表,因为read-uncommitted模式下的连接既不会阻塞也不会被任何其他连接阻塞。 我尝试将pragma设置为在SQL查询命令语句中读取未提交,如下所示: PRAGMA read_uncommitted = 1; SELECT Column1, Column2 FROM MyTable 使用不同连接的同一线程上的SQL更新仍然失败,并出现“数据库已锁定”exception。 然后,我尝试将隔离级别设置为在连接实例上读取未提交。 同样的例外仍然没有变化。 如何在不锁定数据库的情况下使用开放数据读取器来遍历数据库中的行,以便我可以执行更新? 更新: 以下两个答案都有效。 然而,我已经从使用默认回滚日志转移到现在使用预写日志,这提供了改进的数据库读写并发性。

无法加载文件或程序集“System.Data.SQLite”或其依赖项之一。 尝试加载格式不正确的程序

我试图在我的Aspx项目中使用64位Sqlite 。 当我运行该项目时,我收到以下错误: 无法加载文件或程序集“System.Data.Sqlite”或其依赖项之一。 尝试加载格式不正确的程序。 我甚至将Enable 32-Bit Aplications程序设置为True来解决问题,但问题仍然存在。 我正在使用.Net 4 Framework 。 我甚至下载了64-bit SQlite .dll并将其包含在我的项目中,但它仍然无法解决我的问题。 我该怎么做才能解决这个问题? 因为我无法发布图像。 我发布了错误日志 Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. Exception Details: System.BadImageFormatException: Could not load […]