2014-10-01 73 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。

現在程序運行良好。