Как заполнить поле со списком данными, возвращенными с помощью хранимой процедуры? - PullRequest
0 голосов
/ 25 июня 2019

Я хочу заполнить поле со списком данными из хранимой процедуры 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 голосов
/ 26 июня 2019

Если я правильно понимаю, вы хотите получить данные из базы данных (используя 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", ....

Это заполнит categoryPocoList данными, возвращаемыми SP. Теперь вы просто связываете этот список с помощью поля со списком:

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

В качестве альтернативы вы можете использовать for или foreach или любую другую технику для переплета.

0 голосов
/ 28 июня 2019

Я использую это и его работы, спасибо за помощь:

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";
            }
0 голосов
/ 25 июня 2019

Попробуйте это.

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;
        }
...