我使用以下函数从数据库中获取值。
问题是当我选择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)
答案 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)