如果数据为空,如何阻止sqlitedatareader返回0?

时间:2017-03-07 06:25:14

标签: c# sqlite datareader

我正在尝试使用以下代码从SQLite数据库的表中获取1列的数据。

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,即使DataBase中有null也是如此。因此,此处调用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时才会发生异常。

请建议一种方法来完成任务。

1 个答案:

答案 0 :(得分:0)

正确检查REAL DbNull值是:

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

如果你有字符串“null”

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