2013-03-20 58 views
3

我是SQLite的初學者。現在我正試圖在示例northwind數據庫中插入新記錄。我的C#代碼如下:C#SQlite INSERT INTO不起作用

 SQLiteConnection myConnection = new SQLiteConnection(); 

     myConnection.ConnectionString = @"Data Source=|DataDirectory|\northwindEF.db"; 

     using (myConnection) 
     { 
      SQLiteCommand myCommand = myConnection.CreateCommand(); 
      myCommand.CommandText = "INSERT INTO Categories(CategoryID,CategoryName,Description) VALUES(11,'Bakery','Baked goods such as bread and cakes')"; 
      myConnection.Open(); 
      myCommand.ExecuteNonQuery(); 
      myConnection.Close(); 
     } 

當我運行這個程序,我沒有得到任何錯誤。但我的新紀錄沒有插入表格。我的代碼有什麼問題。請幫幫我。

+0

我不知道,但如果類別ID是主鍵,改變你的查詢是這樣的:「INSERT INTO類別(類別名稱,描述)VALUES(‘麪包’,‘烘焙食品,如麪包,蛋糕’)」 – 2013-03-20 22:13:02

+0

CategoryID是主鍵。正如你所說,我改變了我的查詢,但問題仍然存在。 :-( – 2013-03-20 22:23:46

+0

SQLiteCommand可能需要用分號終止CommandText屬性 – pixelbadger 2013-03-20 22:24:30

回答

0

你爲什麼認爲「新記錄沒有插入」? ExecuteNonQuery會告訴你有多少記錄受到影響;它返回什麼?

您是如何運行該程序的?從調試器? DataDirectory是數據安裝到的文件夾。如果您尚未在.sdf文件項目屬性中更改某些內容,Visual Studio會將數據安裝到項目\ debug \ bin \文件夾中。在那裏尋找一個.sdf文件,是你的「新紀錄」嗎?

4

這是一個常見的陷阱。服務器資源管理器中的連接將構建到存儲在項目文件夾中的數據庫文件。然後,在運行時將數據庫複製到輸出目錄,並且每個插入,更新和刪除都針對該數據庫。在服務器資源管理器中沒有任何更改,因爲數據庫不同如果屬性'Copy to the output directory'設置爲Copy always,也會發生同樣的情況。在這種情況下,每次運行時,輸出目錄中的數據庫都會被從項目根文件夾獲取的全新副本覆蓋,並且每次刪除,更新或插入都會在下次運行時消失。

0

嘗試這樣編碼,它總是檢查連接是否有錯誤或您的查詢是否有錯誤。

using (SQLiteConnection con = new SQLiteConnection { ConnectionString = "connectionstring" }) 
{ 
    using(SQLiteCommand cmd = new SQLiteCommand { Connection = con }) 
    { 
     // check connection state if open then close, else close proceed 
     if(con.State == ConnectionState.Open) 
      con.Close(); 

     //then 
     try 
     { 
      // try connection to Open 
      con.Open(); 
     } 
     catch 
     { 
      // catch connection error. 
     } 

     try 
     { 
      // your insert query 
     } 
     catch 
     { 
      // catch query error 
     } 

    } // Close Command 

} // Close Connection