'System.Data.Common.DbDataReader.GetString(int)'的最佳重载方法匹配有一些无效的参数

时间:2016-06-08 16:55:13

标签: c#

我正在尝试自动完成,我收到此错误,我不知道如何解决它

这是我的代码:

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'

需要帮助

1 个答案:

答案 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

这是使用"选择*"的危险。你应该在列名中。我重复一遍,你应该输入列名,这样你就可以看到你期望的列。