【发布时间】:2017-03-07 06:25:13
【问题描述】:
我正在尝试使用以下代码从 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 check 总是返回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时才会发生异常。
请提出完成任务的方法。
【问题讨论】:
标签: c# sqlite datareader