如何用存储过程返回的数据填充组合框?

时间:2019-06-25 14:54:55

标签: c# stored-procedures combobox dapper

我想用SQL存储过程中的数据填充组合框。我不知道如何从过程中获取数据并用它填充组合框。

我的代码来自C#:

private void CategoryCombo_SelectedIndexChanged(object sender, EventArgs e)
    {
        using (var connection = Connection.ConnectionFactory.GetOpenConnection())
        {
            DynamicParameters par = new DynamicParameters();
            string category = categoryCombo.SelectedValue.ToString();
            int cid = Int32.Parse(category);
            par.Add("@Category", cid);
            connection.Execute("Get_lineFromSchema", par, commandType: System.Data.CommandType.StoredProcedure);

        }
    }

以下是存储过程:

ALTER procedure [dbo].[Get_lineFromSchema](@Category int) as
select bs.Line_id, l.name from Budget_Scheme bs
inner join B_Line l on l.Line_id=bs.Line_id
where bs.Budget_id=1 and bs.Category_id = @Category
group by bs.Line_id, l.Name

3 个答案:

答案 0 :(得分:0)

尝试一下。

using (SqlConnection conn = new SqlConnection("ConnectionString"))
        {
            SqlCommand sqlComm = new SqlCommand("Get_lineFromSchema", conn);
            sqlComm.Parameters.AddWithValue("@Category", cid);

            sqlComm.CommandType = CommandType.StoredProcedure;

            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = sqlComm;
            DataTable result = new DataTable();
            da.Fill(result);

            CategoryCombo.DataSource = result;
        }

答案 1 :(得分:0)

如果我理解正确,则希望从数据库中获取数据(使用SP),并使用Dapper将其填充到组合框中。

此处使用Execute方法不正确。请改用Query方法。另外,您需要定义一个保存返回数据的类型。此类型应与您的SP返回的内容匹配。

因此,您的类型将类似于以下内容:

public sealed class CategoryPoco
{
    public int Line_id {get; set;}
    public string name {get; set;}
    ...
}

然后您通过调用通用的Query方法来填充此类型列表:

List<CategoryPoco> categoryPocoList = connection.Query<CategoryPoco>("Get_lineFromSchema", ....

这将用SP返回的数据填充categoryPocoList。现在,您只需使用组合框bind将此列表:

CategoryCombo.DataSource = categoryPocoList;
CategoryCombo.DisplayMember = "name";

或者,您可以使用forforeach或任何其他绑定方法。

答案 2 :(得分:0)

我正在使用它及其作品,谢谢帮助:

using (SqlConnection conn = new SqlConnection(@"Data Source=LAP100MK\SQLSERVER;Initial Catalog=HomeBudgetAPP;Integrated Security=True"))
            {
            string category = categoryCombo.SelectedValue.ToString();
            int cid = Int32.Parse(category);
            SqlCommand cmd = new SqlCommand("Get_lines", conn);
            cmd.Parameters.AddWithValue("@Category", cid);
            cmd.CommandType = CommandType.StoredProcedure;
            SqlDataAdapter da = new SqlDataAdapter();
            da.SelectCommand = cmd;
            DataTable result = new DataTable();
            da.Fill(result);
            LineCombo.DataSource = result;
            LineCombo.DisplayMember = "Name";
            LineCombo.ValueMember = "Line_id";
            }