以下是一些代码:
OdbcConnection connection = new OdbcConnection(@"DRIVER={MySQL ODBC 5.1 Driver};SERVER=" + ip + ";DATABASE=db_name;USER=user;PASSWORD=" + dbPw + ";");
connection.Open();
string queryString = query;
OdbcCommand command = new OdbcCommand(queryString);
command.Connection = connection;
OdbcDataReader myReader = command.ExecuteReader();
int fieldsN = myReader.FieldCount;
StringBuilder sb = new StringBuilder();
while (myReader.Read())
{
for (int i = 0; i < fieldsN; i++ )
{
sb.Append(myReader.GetString(i) + " ");
}
sb.Append(", ");
}
connection.Close();
//Console.WriteLine(sb.ToString());
此代码适用于“SELECT * FROM some_table”或“SELECT(something,something_else)FROM some_table”等查询。
然而,当我使用“显示来自some_table的列”时,它会失败。
这是我得到的错误:
无法将'System.DBNull'类型的对象强制转换为'System.String'。
此错误发生在myReader.GetString()行的某处。
我尝试创建一个if语句,检查myReader.GetString(i)是否为System.DBNull无效。无论我做什么,总是出错。我不明白发生了什么。
感谢您的帮助!
答案 0 :(得分:2)
在调用GetString()之前,需要检查DBNull。 See this answer.
if (!myReader.IsDBNull(i))
sb.Append(myReader.GetString(i));
答案 1 :(得分:1)
通常,您需要注意可空列的值。 DB通过返回名为null
的特殊对象来表示返回值为DBNull
。您无法将其转换为string
或其他任何内容,因此您的代码应使用IsDBNull
检查是否为null:
if (!myReader.IsDBNull(i)) {
sb.Append(myReader.GetString(i) + " ");
}