2017-08-08 90 views
-2

我想從使用C#的MySQL數據庫中獲取數據,但是當我使用方法Int32.Parse()時,我得到了一個InvalidCastException。 這是我的代碼: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(); 
} 

但是,如果我投reader["id"](這是Object),以String我不明白爲什麼它不工作...

+1

什麼是'閱讀器[「身份證」]'的價值? –

+0

@Pietro不,它是一個'int' *類型*。它的*值*是什麼? – Scott

+0

我在數據庫中有兩行,第一個包含3個'id'字段,另一個是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()'和'cast'之間的區別嗎?或者無論如何,爲什麼'ToString()'工作和鑄造不... – Pietro

+0

@Pietro你沒有顯示你的表定義。我猜你的'id'列已經是某種整數了(這是因爲'(string)reader [「id」]'失敗)。所以沒有必要先將它轉換爲一個字符串('ToSring()')然後再解析它('Int32.Parse')...只需要'int id =(int)reader [「id」]'should工作。 –