使用SQL Server列值填充组合框

时间:2017-10-19 11:47:13

标签: c# sql-server

你能帮助我吗,我试图用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);
        }
    }    
}

2 个答案:

答案 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
  • DisplayMemberValueMember用于将标签和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()