2017-03-07 59 views
0

我想使用下面的代碼從SQLite數據庫中的表中獲取1列的數據。如果數據爲空,如何停止sqlitedatareader返回0?

System.Data.SQLite.SQLiteConnection m_dbConnection = new System.Data.SQLite.SQLiteConnection(String.Format("Data Source={0};Version=3;", filePath)); 
m_dbConnection.Open();  
using (SQLiteCommand cmd = new SQLiteCommand()) 
{ 
// Select query here 
} 
var command = new SQLiteCommand(Query, m_dbConnection); 
SQLiteDataReader reader = command.ExecuteReader(); 
List<object> data = new List<object>(); 
while (reader.Read()) 
{ 
    if (reader[0].GetType() == typeof(DBNull)) // Always gives False 
     data.Add(reader.GetString(0)); 
    else 
     data.Add(reader.GetValue(0)); 
} 

DBNull檢查始終返回false即使在數據庫空。因此,這裏調用reader.GetValue(0)並將DBNull轉換爲0

注:列的數據類型爲獲取是int

我不想這個DBNull得到轉換爲0。如果我不喜歡這樣,然後我的任務的實現。

while (reader.Read()) 
{ 
    try 
    { 
    data.Add(reader.GetString(0)); 
    } 
    catch (Exception) 
    { 
    data.Add(reader.GetValue(0));       
    }                 
} 

但正是因爲在大多數情況下會拋出異常,只有當數據DBNull則不會出現異常錯誤的方式。

請提出一個方法來完成任務。

回答

0

爲真正的DBNull值對檢查:

string value; 
if (dataReader.IsDBNull(0)) value = ""; 
else value = dataReader.GetString(0); 

如果你有字符串 「null」

string value = dataReader.GetString(0); 
if(value.ToLower()=="null")value=""; 
+0

不工作!即使在這裏'if(reader.IsDBNull(0))'總是返回false。如果值爲null,它不會返回true。 – JDoshi

+0

哇哇。你確定有REAL DbNull嗎?或者只是字符串'null'?因爲這段代碼對於DbNull的 – Sergio

+0

來說是完美的工作,所以我相信它不是字符串,因爲當我像'String str = reader [0]那樣傳遞它作爲String'時,'str'返回給我'null'。 – JDoshi