2013-04-22 56 views
0
try 
{ 
    connection.Open(); 
    myReader = cmdDatabase.ExecuteReader(); 
    while (myReader.Read()) 
    { 
     string nationality = myReader.GetString("country"); 
     cmbnationality.Items.Add(nationality); 
    } 
} 

我有這樣的問題:經與C#的錯誤,同時連接到一個數據庫

Error 2 Argument 1: cannot convert from 'string' to 'int' 

在生產線:

string nationality = myReader.GetString("country"); 

誰能幫助我?我基本上試圖從我的數據庫中填充組合框中的值。 「country」是我在數據庫中的列名。

回答

3

GetString接受一個int參數,這是你想要的數據的順序。將其更改爲:

string nationality = myReader.GetString(myReader.GetOrdinal("country")); 

見IDataReader.GetString方法here的文檔。

+0

非常感謝你的工作,但你能解釋我做了什麼? – 2013-04-22 19:04:35

+0

您的查詢返回N個列數;數據閱讀器有一些方法可以讓你通過查詢中列出現的順序來獲取數據,這就是'GetString'所做的。 'GetOrdinal'接受一個列名稱,告訴你它的結束位置,這樣你就可以用它來調用'GetString'。真的按照MSDN文檔的鏈接,這是相當不錯的。 – Andy 2013-04-22 19:08:41

+0

@YudishNundun請記住通過點擊向上/向下按鈕下方的複選框來接受您認爲最有用的答案。 – Andy 2013-04-22 19:30:43

2

這只是因爲Reader.GetString()預計int作爲參數。您正在通過string。如果您傳遞一個字符串,你將不得不這樣調用它:

string nationality = myReader.GetString (reader.GetOrdinal("country")); 
+0

我需要過時字符串,因爲「國家」是我的數據庫列名。 :/ – 2013-04-22 19:02:47

+0

@YudishNundun這是可行的。看到我的答案,你只需要添加這個電話 – phadaphunk 2013-04-22 19:03:29

0

GetString期待一個INT參數,而你傳遞一個字符串。做到這一點,而不是:

string nationality = myReader.GetString (myReader.GetOrdinal("country")); 

請閱讀詳情如下:

GetOrdinal

GetString