错误无法转换类型为' System.Int32'的对象输入' System.String'

时间:2016-06-25 20:35:35

标签: c# asp.net

我使用以下函数从数据库中获取值。

问题是当我选择int类型的列时。

我收到此错误Unable to cast object of type 'System.Int32' to type 'System.String'.

在此行result.Add(dr.GetString(0));

代码

[WebMethod]
public static List<string> GetAutoCompleteData(string value, string filterBy)
{
    string strConnString = ConfigurationManager.ConnectionStrings["ConnString"].ConnectionString;
    using (SqlConnection con = new SqlConnection(strConnString))
    {
        con.Open();
        string command = string.Format("select {0} from Users where {0} LIKE '%'+@SearchText+'%'", filterBy);
        using (SqlCommand cmd = new SqlCommand(command, con))
        {
            cmd.Parameters.AddWithValue("@SearchText", value);

            using (SqlDataReader dr = cmd.ExecuteReader())
            {
                List<string> result = new List<string>();
                while (dr.Read())
                {
                    result.Add(dr.GetString(0));
                }
                return result;
            }
        }
    }
}

用户表格结构

UserID   type int
UserName type nvarchar(50)
Password type nvarchar(50)

3 个答案:

答案 0 :(得分:8)

  

当我选择int

类型的列时

根据代码,您尝试选择string类型的列:

dr.GetString(0)

如果列是int,则获取int

dr.GetInt32(0)

然后您可以将其转换为列表的string

result.Add(dr.GetInt32(0).ToString());

特别是关于错误,请注意the documentation中的文字:

  

不进行转换;因此,检索到的数据必须已经是一个字符串。

答案 1 :(得分:2)

尝试result.Add(dr.GetValue(0).ToString());

为避免GetValue()返回null,请执行此操作 -

result.Add((sqlreader.IsDBNull(0) ? "" : dr.GetValue(0).ToString());

答案 2 :(得分:0)

我遇到了同样的错误:&#39; System.Int32&#39;输入&#39; System.String&#39;

这里,如果你想绑定字符串值意味着

dr.GetString(1)

如果你想打印int值意味着

dr.GetInt32(0)

我还有一个错误:指定演员无效。

如果你想要字符串意味着你需要把

dr.GetString(1)

最初我做了dr.GetString(0),显示Specified cast无效。 同样的事情,如果你需要int值意味着你需要dr.GetInt32(0)而不是dr.GetInt32(1)