2017-03-07 129 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