我想从 mono 访问一个 sqlite 数据库: 数据库存储在文件“languages.sqlite”中并包含表“spanish-german”。
- 我安装了 monodevelop 数据库插件
- 我创建了一个数据库连接 - 使用 IDE 工具
然后测试了这个连接——用IDE工具查询数据库。
从“西类牙语-德语”中选择 *
"hablar| sprechen"
"hacer | machen,tun"
表格有两列,一列是西类牙语单词,一列是德语翻译
- 我使用 IDE 创建了一个 LINQ 类。输出看起来不错。为数据库创建了一个类,为表创建了另一个类。
现在我需要在我的代码中连接到数据库。这应该是相当简单的,但我无法让它工作。这是我的代码:
string connectionString = "Data Source=languages.sqlite";
DataContext dataContext = new DataContext (connectionString);
Table<Spanish_German> words = dataContext.GetTable<Spanish_German> ();
var query =from word in words select word;
foreach (var word in query)
Console.WriteLine (word.Spanish);
这编译得很好,但在运行时,代码在最后的打印语句处停止。
System.Data.SqlClient.SqlConnection.Open() "filename unknown"
显然文件名不正确。数据库存储在文件夹数据库中。 我尝试了以下连接字符串:
- “语言.sqlite”
- “数据库/语言.sqlite”
- “语言”
- “数据库/语言”
- “数据源=languages.sqlite”
- “数据源=databases/languages.sqlite”
- “数据源=语言”
- “数据源=数据库/语言”
然后发现MS对这些字符串有自定义格式,“Data Source”应该叫“Addr”。所以现在我正在使用 - “Addr=languages.sqlite”
我得到了一个不同的异常:
Mono.Data.Tds.TdsInternalException has been thrown. Server closed the connection.
那是什么?我该如何解决?
更新:
我将数据库的构建选项更改为“content”并将其复制到输出目录。然后我添加了“Version=3;”到连接字符串。最后,我将 dataContext 更改为使用 sqlite。
通过所有三个更改,程序可以正常工作,如果其中一个被遗漏,它就不会。
非常感谢。如果你们中的一个人能根据他的评论创建一个答案,我会接受。
最佳答案
我将数据库的构建选项更改为“content”并将其复制到输出目录。然后我添加了“Version=3;”到连接字符串。最后,我将 dataContext 更改为使用 sqlite。
现在程序运行正常。
关于c# - 使用 Mono : Can't connect to my sqlite database 的 Linq to SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26137487/