2017-03-07 26 views
0

以下のコードを使用してSQLiteデータベースのテーブルから1列のデータを取得しようとしています。データがnullの場合、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は、データベースがnullであっても常にfalseを返します。したがって、reader.GetValue(0)が呼び出され、DBNullが0に変換されます。

注:は、列のデータ型がフェッチされるべき、私は私のタスクが達成され、その後、このようにそれを行う場合、私はこのDBNullは0に変換取得する必要はありませんint

です。

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

しかし、それは大多数の場合例外にスローされますので、データはDBNullある場合にのみ、例外が発生しません間違った方法です。

タスクを達成する方法を提案してください。 REAL DbNullに値の

答えて

0

右のチェックは次のとおりです。

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を返します。 valueがnullの場合はtrueを返しません。 – JDoshi

+0

うわー。あなたは本当のDbNullがあることを確信していますか?または単に文字列 'null'がありますか?このコードはDbNullの – Sergio

+0

にはちょうど完璧なので、 'String str = reader [0] to String'のように渡すと' str'は私に 'null'を返すので、文字列ではないと確信しています。 – JDoshi

関連する問題