2

ここにいくつかのコードがあります:

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 * FROMsome_table」や「SELECT(something、something_else)FROMsome_table」などのクエリで正常に機能します。

ただし、「SHOWCOLUMNSFROMsome_table」を使用すると失敗します。

これが私が得るエラーです:

タイプ'System.DBNull'のオブジェクトをタイプ'System.String'にキャストできません。

このエラーは、myReader.GetString()行のどこかで発生します。

myReader.GetString(i)がSystem.DBNullであるかどうかをチェックするifステートメントを作成してみました。私が何をしても、それは常にエラーになります。何が起こっているのかわかりません。

助けてくれてありがとう!

4

2 に答える 2

2

GetString()を呼び出す前に、DBNullをチェックする必要があります。この答えを参照してください。

if (!myReader.IsDBNull(i))
    sb.Append(myReader.GetString(i));
于 2012-04-10T03:07:45.293 に答える
1

一般に、null許容列の値に注意を払う必要があります。DBは、戻り値が。nullと呼ばれる特別なオブジェクトを返すことによってであることを通知しますDBNullstringそれを他の何かにキャストすることはできないので、コードは次のIsDBNullように使用してnullをチェックする必要があります。

if (!myReader.IsDBNull(i)) {
    sb.Append(myReader.GetString(i) + " ");
}
于 2012-04-10T03:07:47.313 に答える