2017-08-08 8 views
-2

C#を使用してMySQL DBからデータを取得しようとしましたが、Int32.Parse()メソッドを使用するとInvalidCastExceptionが返されます。 これは私のコードです:あなたは2つだけの値が必要な場合はいけないデータベースの応答でInvalidCastExceptionが発生しました。C#

MySqlConnection conn = new MySqlConnection("SERVER=localhost;database=my_db;uid=root;password="); 
MySqlCommand cmd = new MySqlCommand(); 

try 
{ 
    conn.Open(); 

    String query = "SELECT * FROM sale;"; 
    MySqlCommand qrycmd = new MySqlCommand(query, conn); 
    MySqlDataReader reader = qrycmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     String nome = (String) reader["nome"]; 
     int id = Int32.Parse((String) reader["id"]); 
    } 
} 
catch (MySqlException e) 
{ 
} 
finally 
{ 
    if (conn!=null) 
     conn.Close(); 
} 

しかし、私はStringに(Objectです)reader["id"]を唱えた場合、それが動作しない理由を私は見ることができない...

+1

'リーダー[「ID」]'の値は何ですかを使用することでも良いですか? –

+0

@Pietroいいえ、それは 'int' *型です。その* value *は何ですか? – Scott

+0

私はデータベースに2行あり、最初は 'id'フィールドに3を含み、もう1つは4です。 – Pietro

答えて

1

つかいます *。 A.soキャストいけないが、代わりにToString()を使用します。

string query = "SELECT mome,ID FROM sale;"; 
    MySqlCommand qrycmd = new MySqlCommand(query, conn); 
    MySqlDataReader reader = qrycmd.ExecuteReader(); 
    while (reader.Read()) 
    { 
     string nome = reader["nome"].ToString(); 
     int id = Int32.Parse(reader["id"].ToString()); 
    } 

最終TryParse

+0

ありがとう、ありがとう。これでうまくいきますが、 'ToString()'を使ってキャストと使用の違いを教えてください。または、なぜToString()が動作し、キャストしないのか... – Pietro

+0

@Pietroあなたはテーブル定義を表示しませんでした。私は、あなたの 'id'カラムは既にある種類の整数(thatswhy'(string)reader ["id"] 'が失敗したと思います)。したがって、最初に文字列( 'ToSring()')に変換してから再度解析する必要はありません( 'Int32.Parse')...' int id =(int)reader ["id"] 'should作業。 –

関連する問題