无法从数据库中获取列类型
Posted
技术标签:
【中文标题】无法从数据库中获取列类型【英文标题】:Can't get column types from database 【发布时间】:2012-04-10 03:02:28 【问题描述】:这里有一些代码:
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”等查询。
但是当我使用“SHOW COLUMNS FROM some_table”时它失败了。
这是我得到的错误:
无法将“System.DBNull”类型的对象转换为“System.String”类型。
此错误发生在 myReader.GetString() 行中的某处。
我尝试创建一个 if 语句来检查 myReader.GetString(i) 是否为 System.DBNull 无济于事。无论我做什么,它总是出错。我不明白发生了什么。
感谢您的帮助!
【问题讨论】:
【参考方案1】:在调用 GetString() 之前,您需要检查 DBNull。 See this answer.
if (!myReader.IsDBNull(i))
sb.Append(myReader.GetString(i));
【讨论】:
【参考方案2】:通常,您需要注意可空列的值。 DB 通过返回一个名为DBNull
的特殊对象来表示返回值为null
。您不能将其转换为 string
或其他任何内容,因此您的代码应使用 IsDBNull
来检查 null,如下所示:
if (!myReader.IsDBNull(i))
sb.Append(myReader.GetString(i) + " ");
【讨论】:
谢谢,这正是我所需要的。不过,mgnoonan 打败了你 :)以上是关于无法从数据库中获取列类型的主要内容,如果未能解决你的问题,请参考以下文章