2011-09-21 55 views
2

我想在Windows ce 5.1.17中使用SQLite。 我在我的項目的調試文件夾中使用SQLite Administrator創建SQLite數據庫。 然後我將System.Data.SQLite.dll和SQLite.Interop.065.dll添加到我的項目中。 我正在嘗試下面的代碼連接到數據庫。在SQLite中打開連接

SQLiteConnection myConnection = null; 
myConnection = new SQLiteConnection(@"Data Source=" + System.IO.Path.Combine(System.IO.Path. GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase), Stock.s3db)+ "; Version=3; Cache Size =100"); 
       myConnection.Open(); 

       SQLiteCommand cmd = new SQLiteCommand(); 
       cmd.CommandText = "select * from shops;"; 
       cmd.CommandType = CommandType.Text; 
       cmd.Connection = myConnection; 
       cmd.ExecuteReader();// I get exception no such table: shops 

而且當我檢查MyConnection的數據庫屬性它顯示「數據庫=‘主’」。我不知道爲什麼數據庫名稱是'main',但是在myConnection中,我將數據源設置爲Stock.s3db。

回答

8

使用的連接字符串生成器,以確保您得到正確格式的字符串

SQLiteConnectionStringBuilder builder = new SQLiteConnectionStringBuilder(); 
builder.FailIfMissing = true; 
builder.DataSource = "Insert the fully qualified path to your sqlite db"; 
SQLiteConnection connection = new SQLiteConnection(builder.ConnectionString); 
connection.Open(); 
0

很有可能您的數據庫文件不在正確的文件夾中。嘗試給這條線:

myConnection = new SQLiteConnection(@"Data Source=Stock.s3db; Version=3;"); 

您的數據庫的完整路徑。

+0

現在,我得到異常。 System.Data.SQLite.SQLiteException:無法打開數據庫文件 –

1

如果您查看Debug/Release文件夾,您可能會發現爲您創建的空數據庫文件,因爲您指定的文件不存在。 'main'是sqlite的標準數據庫名稱。

複製您的數據庫在所述文件夾中進行測試,或指定連接字符串中的完整路徑。

請嘗試此查詢以確定您使用的文件位於何處。

PRAGMA database_list 
+0

PRAGMA database_list查詢返回我0.這是什麼意思? –

+0

您是否檢查過連接對象的狀態?您需要確定您是否處於「打開」狀態。 – zeFrenchy

+0

我只有連接狀態open.Using數據源= Stock.s3db在我的連接字符串(但現在數據庫在主)。如果我給完整路徑我無法打開文件。 (我將Stock.s3db複製到我的項目的輸出目錄中。) –

1

把數據庫中生成輸出的debug文件夾不意味着該文件最終會在目標設備上。您需要將數據庫複製到目標設備(有多種機制,如USB磁盤,遠程文件查看器,將其作爲內容項目添加到項目中等)。

我也傾向於使用完全合格的數據庫路徑,因爲CE沒有任何工作目錄的概念。

+0

我用它作爲內容項目添加到我的項目中, –

+0

查看設備文件系統。那裏有文件嗎?它是否可寫?再次,在連接字符串中使用完全限定的路徑。 – ctacke