我试图将数据库中的数据添加到acombobox。
try
{
SqlCeCommand com = new SqlCeCommand("select * from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr.GetString(1);
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
我得到以下异常:
无法转换类型为#System; Int32'的对象输入' System.String'
我在这里缺少什么?
答案 0 :(得分:19)
显然,您的列没有string
类型。显然它是int
。所以使用:
dr.getInt32(1).ToString()
甚至
dr.GetValue(1).ToString()
在数据库中输入更改应该更加粗略。
作为某种一般性建议,我试图至少遵循:
使用名称访问字段,例如
dr.GetGuid(dr.GetOrdinal("id"))
这样的事情也可以通过扩展方法很好地解决:
public T GetFieldValue<T>(this DbDataReader reader, string columnName)
{
return reader.GetFieldValue<T>(reader.GetOrdinal(columnName));
}
附注:包括堆栈跟踪(或者至少说明代码中的哪一行异常来自)可能对其他试图帮助您的人有所帮助。正如你从狂野的猜测中可以看出,罪魁祸首是什么。我的猜测是堆栈跟踪看起来像这样:
SqlDataReader.GetString
YourCode.YourMethod
GetString
或多或少看起来像这样:
public string GetString(int index)
{
return (string) GetValue(index);
}
答案 1 :(得分:1)
您的列似乎没有int类型。 为避免这种情况,您可以使用列名而不是索引。
try
{
SqlCeCommand com = new SqlCeCommand("select * from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr["yourColumnName"].ToString();
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
答案 2 :(得分:0)
好的。它解决了......
这是代码..
try
{
SqlCeCommand com = new SqlCeCommand("select CategoryName from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr.GetString(0);
cmbProductCategory.Items.Add(name);
}
}
catch(Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message, System.Windows.Forms.Application.ProductName, MessageBoxButtons.OK, MessageBoxIcon.Error);
}
我将sqlcommand更改为单个值,并将dr.getstring()的列号更改为0 ..它有效。谢谢你们的帮助..我期待更多,因为我只是我项目的一半..
答案 3 :(得分:0)
在查询中使用列名,然后在阅读器中指定该列名。
SqlCeCommand com = new SqlCeCommand("select catg from Category_Master", con);
SqlCeDataReader dr = com.ExecuteReader();
while(dr.Read()){
string name = dr("catg").ToString();
cmbProductCategory.Items.Add(name);
}