你能帮助我吗,我试图用SQL Server表中一列的值填充一个组合框。我尝试了各种方法,但没有一种方法能够得到理想的结果。
错误是:
错误CS1503参数1:无法转换为'字符串'到' int'
这是我的代码:
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
fillCombo();
}
void fillCombo()
{
string con = "Data Source = xxxxx; Initial Catalog = xxxxx; Integrated Security = False; User Id = xxxxx; Password=xxxx;MultipleActiveResultSets=True";
string Query = "select * from LEAVE ;";
SqlConnection conDataBase = new SqlConnection(con);
SqlCommand cmd = new SqlCommand(Query, conDataBase);
SqlDataReader dr;
try
{
conDataBase.Open();
dr = cmd.ExecuteReader();
while (dr.Read())
{
string lveName = dr.GetString("lve_name");
lveType.Items.Add(lveName);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
答案 0 :(得分:1)
我会这样做:
Dictionary<int, string> lveNames = new Dictionary<int, string>();
while (dr.Read())
{
string lveName = dr["lve_name"].ToString();
int lveId = int.Parse(dr["lve_id"].ToString());
lveNames.Add(lveId, lveName);
}
lveType.DataSource = new BindingSource(lveNames, null);
lveType.DisplayMember = "lveName";
lveType.ValueMember = "lveId";
lve_id
。DisplayMember
和ValueMember
用于将标签和ID绑定到组合框。答案 1 :(得分:1)
始终查看您尝试使用的方法的签名:
dr.GetString(int)
您正在尝试致电
dr.GetString(string)
但是没有重载方法接受字符串。请参阅the documentation of GetString()。
相反,GetString
要求您传递要尝试从中获取字符串的列的基于零的序号。让我们说lve_name
是您查询中的第二列(有点难以辨别,因为您使用的是SELECT * FROM
,但这是另一个主题),您必须使用它像这样:
string lveName = dr.GetString(1);
另外,请检查文档的内容:
不进行转换;因此,检索到的数据必须已经是一个字符串。
这意味着,如果您的查询返回除字符串以外的任何内容,则该方法很可能会抛出InvalidCastException
。为防止这种情况发生,您必须编辑查询,例如
SELECT lve_id, CAST(lve_name as varchar) FROM LEAVE
另一种可能的解决方案是像这样访问列:
string lveName = dr["lve_name"].ToString()