我有一个C#项目,它正在编辑另一个产品(不是我控制的产品)中的现有SQLiteDB,我的问题是当尝试在代码中打开数据库时,我收到以下异常: "打开的文件不是数据库文件,文件已加密或不是数据库"
所以我的假设是数据库已加密,我将无法编辑它!但是,我使用SQLite数据库浏览器,数据库打开时没有任何问题,也没有请求密码等。
然后我使用SQLite数据库浏览器来加密数据库并在执行此操作后将密码留空了我现在能够在代码中连接到数据库,我的问题是每当这个第三方应用程序访问它的数据库时它是为此我做了一些事情,然后我再也无法在代码中打开它,直到我重做上面的步骤。
有没有任何线索可以导致这种行为,我在下面列出了我的代码:
function saveNewHandler() {
var newScenarioName = prompt("file name");
$.ajax({
url : 'http://' + document.domain + ':' + location.port + "/saveAsNew",
type : 'POST',
data : JSON.stringify({'path':scenarioFile, 'data':data, 'name': scenarioName, 'newName': newScenarioName}),
contentType: 'application/json;charset=UTF-8',
success: function (result) {
loadScenario();
}
})
.error(function(xhr, status, error) {
console.log(xhr.responseText);
saveNewHandler(); // ask for new file name
});
}
提前致谢, 路加
答案 0 :(得分:0)
如果其他人在Plutonix的帮助和进一步调查后发现了这个问题,我发现以下内容:在Hex Viewer中打开数据库时,前几个标题行与我在代码中打开的标题行不同可以打开(在使用SQLite DB浏览器打开并删除"加密"我就这样使用它,因为该文件实际上并未被封存。
所以解决方案是在二进制级别编辑文件以更改标题以匹配,现在我可以打开数据库。我用来更改文件的代码示例如下:
using (var lobjFileStream = new FileStream(pstrSQLiteDBPathAndFile, FileMode.Open, FileAccess.ReadWrite))
{
lobjFileStream.Position = 19;
lobjFileStream.WriteByte(0x01);
}
谢谢, 路加