2013-04-22 65 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