我正在尝试自动完成,我收到此错误,我不知道如何解决它
这是我的代码:
void AutoCompleteText(){
Search_Box.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
Search_Box.AutoCompleteSource = AutoCompleteSource.CustomSource;
AutoCompleteStringCollection coll = new AutoCompleteStringCollection();
SqlCeCommand cmd = new SqlCeCommand("select * from Contact_List ;", con);
SqlCeDataReader reader;
try
{
con.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
string sName = reader.GetString("Name");
coll.Add(sName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
Search_Box.AutoCompleteCustomSource = coll;
}
我从
收到此错误string sName = reader.GetString("Name");
我也得到:无法从'String'转换为'int'
需要帮助
答案 0 :(得分:-2)
SqlReader支持" Get"使用列名称。 (SqlReader不是你拥有的)。
IDataReader和DbDataReader" Get"方法需要一个ORDINAL编号。像0,1,2。
这是一个显示我正在谈论的内容的变体:
SqlCeCommand cmd = new SqlCeCommand("select MyInt32Column, MyVarCharColumn, MyBitColumn from MyTable;", con);
SqlCeDataReader reader;
try
{
con.Open();
reader = cmd.ExecuteReader();
while (reader.Read())
{
int myInt32Value = reader.GetInt32(0);
string myStringValue = reader.GetString(1);
bool myBooleanValue = reader.GetBoolean(2);
}
额外奖励:您也可能遇到数据类型问题。如果是这样,你可以这样做:
使用" GetValue(N)"方法
类似这样的事情
object o = reader.GetValue(0);
string mytype = o.GetType().ToString();
这是DEBUGGING代码..它将显示值和数据类型。
然后放回正确的.GetString或GetInt32等等。
PS
这是使用"选择*"的危险。你应该在列名中。我重复一遍,你应该输入列名,这样你就可以看到你期望的列。