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に値の
は働いていません!ここでも 'if(reader.IsDBNull(0)) 'は常にfalseを返します。 valueがnullの場合はtrueを返しません。 – JDoshi
うわー。あなたは本当のDbNullがあることを確信していますか?または単に文字列 'null'がありますか?このコードはDbNullの – Sergio
にはちょうど完璧なので、 'String str = reader [0] to String'のように渡すと' str'は私に 'null'を返すので、文字列ではないと確信しています。 – JDoshi