2014-10-01 76 views
2

我想从mono访问sqlite数据库: 数据库存储在文件“languages.sqlite”中,并包含表“spanish-german” 。Linq to SQL with Mono:无法连接到我的sqlite数据库

  • 我安装了MonoDevelop的数据库插件
  • 我创建了一个数据库连接 - 与IDE工具
  • 然后测试该连接 - 与IDE工具查询数据库。

    SELECT * FROM “西班牙 - 德国”

“hablar | sprechen”

“hacer |玛沁,囤地”

该表有两列,一列与西班牙文字和德文翻译

  • 我创建了一个LINQ类 - 用IDE。输出看起来不错。创建了数据库的类和表的另一个类。

现在我需要连接到我的代码中的数据库。这应该是相当直接的,但我不能得到它的工作。这里是我的代码:

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() “文件名不明”

显然,文件名是不正确的。数据库存储在文件夹数据库中。 我尝试以下的ConnectionStrings:

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

然后发现,MS有这些字符串和“数据源”自定义格式应该叫“地址”。所以,现在我使用 - “地址= languages.sqlite”

和我得到一个不同的异常:

Mono.Data.Tds.TdsInternalException已经抛出。服务器关闭了连接。

那是什么?我该如何解决它?

UPDATE:

我改变了构建选项为数据库“内容”,把它复制到输出目录。然后我添加了“版本= 3;”到connectionString。最后我改变了dataContext来使用sqLite。

所有这三个变化的程序的作品,如果其中一个被遗漏,它不会。

非常感谢。如果其中一个人会从他的评论中创建一个答案,我会接受它。

+1

String DB_CONNECTION_STRING =“Data Source =。/ MyDictionaryDB.sqlite; Version = 3; New = False; Compress = False;”; //数据库和EXE位于同一个文件夹中。或尝试使用:String DB_CONNECTION_STRING =“URI = file:./ MyDictionaryDB.sqlite; Version = 3; New = False; Compress = False;”; – houssam 2014-10-01 21:41:40

+2

但你为什么因为使用Sqlite而得到'SqlClient.SqlConnection'?请参阅http://stackoverflow.com/q/12648217/992406 – houssam 2014-10-01 21:49:56

+0

这将是窃取你的辛苦赚来的代表...发布它自己并将其标记为接受:) – Noctis 2014-10-02 08:35:24

回答

0

我将数据库的构建选项更改为“内容”并将其复制到输出目录。然后我添加了“版本= 3;”到connectionString。最后我改变了dataContext来使用sqLite。

现在程序运行良好。