2009-05-24 53 views
0

我使用Microsoft Visual C#2008 Express Edition與SqlLite返回一個字符串或整數。我成功地打開了我的數據庫和C#代碼,將條目添加到我的表中。基本幫助使用SQLite在C#中需要 - 從查詢

當談到retriving數據,我有一些問題,一直在尋找,尋找如何做這些基本的東西基本教程信息網上...

這裏是我的代碼...(之後我已經打開了被稱爲「conn將」在這裏)到數據庫的連接:

SQLiteCommand cmd = new SQLiteCommand(conn); 
cmd.CommandText = "select myField1,myField2 from myTable where myField3 = '" + tempstring + "';"; 
cmd.CommandType = CommandType.Text; 
SQLiteDataReader reader = cmd.ExecuteReader(); 

while (reader.Read()) 
{ 
    string tmp = reader.GetString(0); 
    System.Console.WriteLine(" my output = " + tmp); 
} 

當我執行這個......我沒有得到任何錯誤,因爲我得到的最後一行沒有輸出,它看起來像while循環根本沒有執行。

我是一個初學者到這個東西...我缺少什麼,是有一個良好的網絡資源在那裏我可以學到這些基本的東西?我對它自己的SQL非常舒服......只是沒有像C#一樣集成這樣的...

+0

添加一些調試(Debug.WriteLine)輸出。是否按照假設的SQL?變量「tempstring」是否有正確的值? – VVS 2009-05-24 18:16:33

回答

5

首先,從行while (reader.Read());刪除傷害後綴分號...!

+0

@亞歷克斯:優秀的眼球! – bbmud 2009-05-24 17:39:13

+0

對不起..這是帖子上的錯字...我鍵入而不是複製粘貼 – adeena 2009-05-24 17:40:41

2

這看起來對我來說是正確的。物業reader.HasRows對於您的查詢是否爲真?

一對夫婦的側面要注意的問題是:

  1. 一定要通過使用{}塊包裹你的對象處置您的SQL資源。
  2. 考慮使用參數化查詢,而不是直接在SELECT語句中注入查詢參數。
+0

你能解釋一下#2在C#中的含義嗎? – adeena 2009-05-24 17:41:28

+0

hasrows = false ...好吧...我開始看到我的問題的一部分。 :) – adeena 2009-05-24 17:43:20

0

好的,亞歷克斯。

除了這一點,因爲你是使用SQLite開始(可能要刪除標記第二L),請記住,SQLite不數據庫級確實保證數據的類型安全。

1

在回答有關如何編寫參數化查詢你的問題:

cmd.CommandText = "select myField1,myField2 from myTable where myField3 = @tempString;"; 
SQLiteParameter param = new SQLiteParameter("@tempString"); 
cmd.Parameters.Add(param); 

// you can modify that value without touching the sql statement (which means you could cache the above command) 
param.Value = tempstring; 
SQLiteDataReader reader = cmd.ExecuteReader(); 
[...] 

參數SQLite中可以有幾種形式,你可以找到here

對參數化查詢更多信息,請參見here

0

不要將您從Sqlite問題中轉移出來,但是如果您對使用C#嵌入的Sqlite查詢感到困難,可以嘗試與Fluent NHibernate。這些技術爲數據庫提供了優秀的數據訪問機制,包括Sqlite。

NHibernate的請求到sqlite的都非常快,你會不會擔心一些SQLite的特質的。如果使用NHibernate正確構建數據訪問層,則應該能夠快速擴展到更強大的數據庫。