c#中的参数错误无效

时间:2014-01-12 07:16:49

标签: c# winforms

我遇到了以下问题。我不知道我做错了什么。它向我显示一个错误“'System.Data.Common.DbDataReader.GetString(int)'的最佳重载方法匹配'有一些无效的参数。”

这是我的代码:

 SqlDataReader myReader;

      mycon.Open();
      myReader = cmdDatabase.ExecuteReader();
      while (myReader.Read())
         { 
          string cName = myReader.GetString("C_Name");

          textBox2.Text=cName;
         }

4 个答案:

答案 0 :(得分:3)

GetString方法仅接受int。你传给它string

MSDN开始,参数(整数)表示“从零开始的列序数。”


如果C_Name是第一列(例如),则您需要致电:

string cName = myReader.GetString(0);

答案 1 :(得分:2)

正如现在多次提到的,GetString的签名需要一个表示列索引的整数。您可以使用GetOrdinal将列名称转换为其序号位置。

因此,您可以使用"C_NAME"获取myReader.GetString(myReader.GetOrdinal("C_NAME"))列的字符串值。

SqlDataReaderoverrides the indexer,您可以将其写为(string)myReader["C_Name"]

完整示例:

var sqc = new SqlCommand("SELECT C_NAME from table", con);
using (var reader = sqc.ExecuteReader())
{
    while (reader.Read())
    {
        int ordinal = reader.GetOrdinal("C_NAME");
        string byOrdinal = reader.GetString(ordinal);
        string byIndexer = (string)reader["C_NAME"];

        Console.Writeline("Column {0}, has the value of {1} (which is the same as {2})",
            ordinal, byOrdinal, byIndexer);
    }
}

您还应该小心将您的读者包装在using语句中,以确保您不会泄漏数据库连接或遇到您考虑启用MARS的情况。

答案 2 :(得分:1)

查看GetString()的签名:

 System.Data.Common.DbDataReader.GetString(int)

它需要一个整数序数(即从零开始的位置)并且您尝试传递一个字符串。没有重载采用单个字符串参数。

答案 3 :(得分:1)

如错误所示,您正在尝试使用不存在的GetString重载。

您正在传递string参数,而该方法期望integer表示所请求列的索引。

您可以在dcumetnation

中详细了解该方法

尝试将代码更改为:

int indexOf cNameIdx = 5;// replace this with the real index from your select query
string cName = myReader.GetString(cNameIdx );