2016-06-25 116 views
0

我正在使用下面的函数从数据库中获取值。错误无法将类型'System.Int32'的对象转换为键入'System.String'

问题是当我选择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 '%'[email protected]+'%'", 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) 
+0

你能告诉我们你的表结构吗? –

回答

2

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

要避免的GetValue()是空的回报,做到这一点 -

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

你能解释一下为什么答案是这样吗?如果你没有解释它,如何解决和为什么解决这个问题,那么对任何人来说都不是非常有帮助的。 – Li357

+0

它解决了我的问题 – Ayman

+0

很好。如果它解决了您的问题,请选择答案。谢谢 –

8

when i select column of type int

根据代码,你要选择string类型的列:

dr.GetString(0) 

如果列是int,然后得到一个int

dr.GetInt32(0) 

,然后可以转换为string为您的列表:

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

具体有关错误,请注意文本the documentation

No conversions are performed; therefore, the data retrieved must already be a string.

+0

这应该被标记为答案,因为它很好地解释了问题,并解释了解决方案 –

0

我面临同样的类型的错误:'System.Int32'键入'System.String'

在这里,如果你要绑定的字符串值意味着

dr.GetString(1) 

要么,如果你要打印的int值意味着

dr.GetInt32(0) 

我得到了一个更错误:指定的转换是无效的。

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

dr.GetString(1) 

最初我做dr.GetString(0)这说明指定的转换无效。 同样的事情,如果你需要int值意味着你需要把dr.GetInt32(0)dr.GetInt32(1)

相关问题