0
我想使用下面的代码从SQLite数据库中的表中获取1列的数据。如果数据为空,如何停止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
检查始终返回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
则不会出现异常错误的方式。
请提出一个方法来完成任务。
不工作!即使在这里'if(reader.IsDBNull(0))'总是返回false。如果值为null,它不会返回true。 – JDoshi
哇哇。你确定有REAL DbNull吗?或者只是字符串'null'?因为这段代码对于DbNull的 – Sergio
来说是完美的工作,所以我相信它不是字符串,因为当我像'String str = reader [0]那样传递它作为String'时,'str'返回给我'null'。 – JDoshi