C# “奇怪”之后可能损坏SQLite表;没有这样的表格”;错误
首先是一些基本信息:C# “奇怪”之后可能损坏SQLite表;没有这样的表格”;错误,c#,sqlite,C#,Sqlite,首先是一些基本信息: 我在Win10 x64的根C:驱动器的“Program files”文件夹中有一个SQLite数据库 我正在从3个程序同时访问数据库 问题: 我使用创建了一个新表table2。然后,我尝试在VS2013的调试模式下使用一个简单的应用程序插入一行。代码非常简单: using (SQLiteConnection database = new SQLiteConnection("Data Source=C:/Program Files/myapp/testdb.db;Vers
- 我在Win10 x64的根C:驱动器的“Program files”文件夹中有一个SQLite数据库
- 我正在从3个程序同时访问数据库
table2
。然后,我尝试在VS2013的调试模式下使用一个简单的应用程序插入一行。代码非常简单:
using (SQLiteConnection database = new SQLiteConnection("Data Source=C:/Program Files/myapp/testdb.db;Version=3;"))
{
database.Open();
using (SQLiteCommand cmd = database.CreateCommand())
{
cmd.CommandText = "INSERT INTO trades VALUES (@id, @pass);";
cmd.Prepare();
cmd.Parameters.AddWithValue("@id", 36365);
cmd.Parameters.AddWithValue("@pass", "verysecurepassword123");
cmd.ExecuteNonQuery();
}
}
运行时,它给了我一个SQL逻辑错误或缺少数据库错误,消息是没有这样的表
。我试了好几次,结果都一样。一直以来,DB Browser告诉我该表存在,即使在我尝试重新启动它之后;这意味着该表实际上确实存在。[值得注意的一点可能是,VS以非管理员模式运行,这可能是一个问题,因为它需要管理员权限才能写入数据库。]
然后我尝试将CommandText从sqlite_master更改为SELECT COUNT(*)代码>并执行标量。结果是1
,这意味着它无法看到新表
编辑:我几乎完全确定这是某种缓存问题,因为我尝试在数据库副本(不同路径)上再次列出表,它正确读取了2个表
然后我尝试重新启动VS,之后错误立即变为无法写入只读表
。我再次尝试重新启动,这一次是以管理员权限,它识别出了表,并且插入得很好
我的问题:
是什么导致第一个异常给出错误的原因
如何神奇地修复重新启动VS
在同一数据库上运行的第三个应用程序位于单独的VS管理实例上,但调试器是分离的。这个应用程序是一个小规模的服务器,我总是从VS运行它,所以我可以很容易地调试。它使用第一个表(不是新表)。上述(缓存?)问题的原因是否也可能导致此应用程序中使用的第一个表上的数据损坏
程序文件
目录对非管理员具有写保护。有时,Windows会尝试将写入重定向到其他目录以实现向后兼容性,但正如您所看到的,这并不总是可靠的
将需要更改的文件放入您有写访问权的目录(即您的)。对于非管理员,程序文件
目录是写保护的。有时,Windows会尝试将写入重定向到其他目录以实现向后兼容性,但正如您所看到的,这并不总是可靠的
将需要更改的文件放入您有写权限的目录(即您的)。我想您正在回答我的第一个问题。如果是这样的话,你如何解释第二个问题?我想你是在回答我的第一个问题。如果是这种情况,您如何解释第二个?与SQL server上的默认目录有关吗?也许你应该给你的表加上前缀?与SQL server上的默认目录有关吗?也许你应该给你的桌子加前缀?