SQLite 从读取中锁定 Table
SQLite Locking Table from Read
问题: 从 SQLite 获取数据库已锁定的错误
预期结果: 多个应用程序可以从数据库中读取,如果只有一个应用程序写入它,table 将不会被锁定。
我有一个 C# 应用程序可以读取和写入 SQLite 数据库。当应用程序的多个实例 运行 同时存在时,应用程序的任何实例都无法对数据库进行更改,但所有实例都可以从中读取。我发现的所有内容都表明,只要一次只有一个应用程序尝试写入 BD,它就不应该被锁定。我的连接字符串明确指出 LockingMode=Normal; Synchronous=Off
。关于什么会导致这种情况的任何建议?下面是运行和write遇到锁的连接方法:
私有字符串_数据库路径;
私有 SQLiteConnection _dbConn;
public dbPrismIIDirectory()
{
_databasePath = "";
try
{
_dbConn = new System.Data.SQLite.SQLiteConnection();
}
catch (Exception exc)
{
System.Windows.Forms.MessageBox.Show(exc.Message);
}
}
public Boolean open(String databasePath)
{
_databasePath = databasePath;
// Attempt to open the database
try
{
_dbConn.ConnectionString = String.Format("Data Source={0}; LockingMode=Normal; Synchronous=On", _databasePath);
_dbConn.Open();
return true;
}
catch
{
return false;
}
}
public Boolean CreateEntry()
{
try
{
sqlCMD.CommandText = //SET UP SQL HERE//;
sqlCMD.ExecuteNonQuery();
return true;
}
catch (Exception exc)
{
System.Windows.Forms.MessageBox.Show(exc.Message);
return false;
}
}
写入者需要独占访问数据库,因此它阻止了任何其他读取者和写入者。
允许一位作者与读者同时 运行,如果您不使用网络,请启用 WAL mode。
问题: 从 SQLite 获取数据库已锁定的错误 预期结果: 多个应用程序可以从数据库中读取,如果只有一个应用程序写入它,table 将不会被锁定。
我有一个 C# 应用程序可以读取和写入 SQLite 数据库。当应用程序的多个实例 运行 同时存在时,应用程序的任何实例都无法对数据库进行更改,但所有实例都可以从中读取。我发现的所有内容都表明,只要一次只有一个应用程序尝试写入 BD,它就不应该被锁定。我的连接字符串明确指出 LockingMode=Normal; Synchronous=Off
。关于什么会导致这种情况的任何建议?下面是运行和write遇到锁的连接方法:
私有字符串_数据库路径; 私有 SQLiteConnection _dbConn;
public dbPrismIIDirectory()
{
_databasePath = "";
try
{
_dbConn = new System.Data.SQLite.SQLiteConnection();
}
catch (Exception exc)
{
System.Windows.Forms.MessageBox.Show(exc.Message);
}
}
public Boolean open(String databasePath)
{
_databasePath = databasePath;
// Attempt to open the database
try
{
_dbConn.ConnectionString = String.Format("Data Source={0}; LockingMode=Normal; Synchronous=On", _databasePath);
_dbConn.Open();
return true;
}
catch
{
return false;
}
}
public Boolean CreateEntry()
{
try
{
sqlCMD.CommandText = //SET UP SQL HERE//;
sqlCMD.ExecuteNonQuery();
return true;
}
catch (Exception exc)
{
System.Windows.Forms.MessageBox.Show(exc.Message);
return false;
}
}
写入者需要独占访问数据库,因此它阻止了任何其他读取者和写入者。
允许一位作者与读者同时 运行,如果您不使用网络,请启用 WAL mode。