Linq to SQL with Mono:无法连接到我的 sqlite 数据库



我想从mono访问sqlite数据库:数据库存储在文件"languages.sqlite"中,并包含表"西班牙语-德语"。

  • 我安装了monodedevelop数据库插件
  • 我用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);

这编译得很好,但运行时,代码会在最后的print语句处停止。

System.Data.SqlClient.SqlConnection.Open()"文件名未知"

显然文件名不正确。数据库存储在文件夹数据库中。我尝试了以下连接字符串:

  • "languages.sqlite"
  • "数据库/语言.sqlite"
  • "语言"
  • "数据库/语言"
  • "数据源=语言.sqlite"
  • "数据源=数据库/语言.sqlite"
  • "数据源=语言"
  • "数据源=数据库/语言"

然后发现MS对这些字符串有一个自定义格式,"数据源"应该被称为"Addr"。所以现在我使用-"Addr=languages.sqlite"

我得到了一个不同的例外:

引发了Mono.Data.Tds.TdsInternalException。服务器关闭了连接。

那是什么?我该怎么修?

更新:

我将数据库的构建选项更改为"内容",并将其复制到输出目录中。然后我在connectionString中添加了"Version=3;"。最后,我将dataContext更改为使用sqLite。

对于这三个更改,程序都是有效的,如果其中一个被排除在外,它就不会。

非常感谢。如果你们中的一个人能根据他的评论创建一个答案,我会接受的

我将数据库的构建选项更改为"content",并将其复制到输出目录中。然后我在connectionString中添加了"Version=3;"。最后,我将dataContext更改为使用sqLite。

现在程序运行良好。

最新更新