我想用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
答案 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";
或者,您可以使用for
或foreach
或任何其他绑定方法。
答案 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";
}