【问题标题】:Creating Auto complete textbox创建自动完成文本框
【发布时间】:2016-01-20 15:03:04
【问题描述】:

这是创建的方法,我收到一个错误,我似乎不明白它是如何发生的,请帮忙!! 错误'System.Data.Common.DbDataReader.GetString(int)'的最佳重载方法匹配有一些无效参数

void AutoCompleteText()
    {
        search_txt.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
        search_txt.AutoCompleteSource = AutoCompleteSource.CustomSource;
        AutoCompleteStringCollection coll = new AutoCompleteStringCollection();

        OleDbCommand command = new OleDbCommand();
        command.Connection = conDB;
        command.CommandText = "select CCSpn_CODE,CCLname,CCFname,CCMname,CCDOB,CCgender,CCSchool,CaClass,CCVillage,CCSiblings,CCGuardian,CCContact,CCcurrentDt,CCImage from abaanaCC";
       // OleDbDataReader myreader;
        conDB.Open();


        OleDbDataReader myreader = command.ExecuteReader()


            while (myreader.Read())
            {
                //tring sName = myreader["CCLname"].ToString();
                string sName = myreader.GetString(1);
                //string sName = Convert.ToString(myreader.("CCLname"));
                coll.Add(sName);
            }

            search_txt.AutoCompleteCustomSource = coll;
            myreader.Close();


        conDB.Close();

    }

【问题讨论】:

    标签: c# winforms


    【解决方案1】:

    GetString 方法接受 int 作为参数。您需要像这样将指定列的索引发送到GetString

    string sName = reader.GetString(1);
    

    1 表示第二列根据需要进行更改。

    或者你可以试试这个:

    string sName = reader["CCLname"].ToString();
    

    解决这个错误:

    行/列不存在数据

    您应该使用using 块,因此您的代码应该是:

    string sqlCmD = "select CCSpn_CODE,CCLname,CCFname,CCMname,CCDOB,CCgender,CCSchool,CaClass,CCVillage,CCSiblings,CCGuardian,CCContact,CCcurrentDt,CCImage from abaanaCC";
    
    using (OleDbConnection conDB = new OleDbConnection(address))
    {
         OleDbCommand command = new OleDbCommand(sqlCmD, connection);
    
         conDB.Open();
    
         using(OleDbDataReader myreader = command.ExecuteReader())
         {
            if (myreader.Read())
            {
                string sName = myreader.GetString(1);
                ...
            }
         }
    }
    

    【讨论】:

    • 这是我得到的错误行/列不存在数据
    • 出现错误ConnectionString 属性尚未初始化。
    • @ElijahAyeeta..在conDB.Open(); 之后使用我的代码,还要确保你还有command.Connection = conDB;
    • @ElijahAyeeta ...如果您想在没有using 块的情况下使用您的代码,我看到您错过了reader.Close();。在您的代码中(您在问题中发布的)在while 之后添加reader.Close();
    • @ElijahAyeeta ...当您使用using 阻止时,您不再需要myreader.Close();
    【解决方案2】:
    string sName = reader.GetString(1);
    

    应返回结果集中第二列的值(在您的情况下为 CCLname 列)。

    【讨论】:

      【解决方案3】:

      也许是这样

      string sName = Convert.ToString(myreader.["CCLname"]);
      

      【讨论】:

      • 您的答案中仍有错字,无法编译。也许你应该仔细检查一下。
      • 是的...那会做@LarsTech。谢谢你。
      猜你喜欢
      • 1970-01-01
      • 2020-05-17
      • 1970-01-01
      • 2014-09-30
      • 2013-08-04
      • 2011-04-18
      • 2010-09-22
      相关资源
      最近更新 更多