【问题标题】: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 无济于事。无论我做什么,它总是出错。我不明白发生了什么。

感谢您的帮助!

【问题讨论】:

    标签: c# mysql database visual-studio odbc


    【解决方案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 打败了你 :)
      猜你喜欢
      • 2017-08-08
      • 1970-01-01
      • 2010-12-29
      • 1970-01-01
      • 2022-11-25
      • 2017-09-21
      • 2017-06-09
      相关资源
      最近更新 更多