C# 创建自动完成文本框
这里是创建的方法,我得到一个错误,我似乎不明白它是如何产生的,请帮助!!错误是“System.Data.Common.DbDataReader.GetString(int)”的最佳重载方法匹配,该方法具有一些无效参数C# 创建自动完成文本框,c#,winforms,C#,Winforms,这里是创建的方法,我得到一个错误,我似乎不明白它是如何产生的,请帮助!!错误是“System.Data.Common.DbDataReader.GetString(int)”的最佳重载方法匹配,该方法具有一些无效参数 void AutoCompleteText() { search_txt.AutoCompleteMode = AutoCompleteMode.SuggestAppend; search_txt.AutoCompleteSource = A
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();
}
方法接受一个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);
...
}
}
}
应该在结果集中的第二列中返回值(在本例中为列CCLname)。可能是这样的
string sName = Convert.ToString(myreader.["CCLname"]);
这是我获取的错误行/列不存在数据这是获取ConnectionString属性未初始化的错误。@Elijahayeta..在
conDB.Open()之后使用我的代码
还要确保您仍然有command.Connection=conDB代码>@Elijahayeta。。。如果您想在不使用的情况下使用块的情况下使用代码,我发现您错过了reader.Close()代码>。在您的代码(您在问题中发布的代码)中添加reader.Close()代码>在之后,而在@Elijahayeta。。。当您使用using
block时,不需要myreader.Close()代码>不再。你的答案中仍然有一个打字错误,阻止它编译。也许你应该再检查一下。耶。。。这就够了。谢谢你。
string sName = Convert.ToString(myreader.["CCLname"]);