C# 无法从数据库中获取列类型

C# 无法从数据库中获取列类型,c#,mysql,database,visual-studio,odbc,C#,Mysql,Database,Visual Studio,Odbc,下面是一些代码: 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(quer

下面是一些代码:

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());
这段代码可以很好地处理查询,如从某个表中选择*或从某个表中选择某物

但是,当我使用某个_表中的SHOW列时,它失败了

下面是我得到的错误:

无法将“System.DBNull”类型的对象强制转换为“System.String”类型

此错误发生在myReader.GetString行的某个位置

我尝试创建一个if语句来检查myReader.GetStringi是否为System.DBNull,但没有效果。无论我做什么,它总是出错。我不明白发生了什么事


谢谢你的帮助

在调用GetString之前,需要检查DBNull


通常,您需要注意可空列的值。DB通过返回一个名为DBNull的特殊对象来表示返回的值为null。您不能将其强制转换为字符串或任何其他形式,因此您的代码应该使用以下方法检查null:

if (!myReader.IsDBNull(i)) {
    sb.Append(myReader.GetString(i) + " ");
}

谢谢,这正是我需要的。但是,mgnoonan击败了你:
if (!myReader.IsDBNull(i)) {
    sb.Append(myReader.GetString(i) + " ");
}