【问题标题】:Invalid argument error in c#c#中的无效参数错误
【发布时间】:2014-01-12 15:38:36
【问题描述】:

我遇到了以下问题。我不知道我做错了什么。它向我显示一个错误“'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;
         }

【问题讨论】:

  • 错误信息甚至说要使用int :-)

标签: c# winforms


【解决方案1】:

GetString 方法只接受int。您将其传递给 string

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


如果C_Name 是第一列(例如),您需要调用:

string cName = myReader.GetString(0);

【讨论】:

    【解决方案2】:

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

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

    SqlDataReader 也可以是overrides 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 的情况。

    【讨论】:

      【解决方案3】:

      GetString()的签名:

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

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

      【讨论】:

        【解决方案4】:

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

        您正在传递一个string 参数,而该方法需要一个代表所请求列的索引的integer

        您可以在dcumetnation中阅读有关该方法的更多信息

        尝试将您的代码更改为:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-10-11
          • 1970-01-01
          • 2012-08-01
          • 1970-01-01
          • 1970-01-01
          • 2021-09-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多