簡體   English   中英

如果數據為空,如何阻止sqlitedatareader返回0?

[英]How to stop sqlitedatareader from returning 0 if data is null?

我正在嘗試使用以下代碼從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));
}

但是,即使數據庫中沒有null, 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時才會拋出異常,否則不會發生異常。

請提出一種完成任務的方法。

正確檢查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="";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM