如何使用mysql数据库存储过程填充组合框

时间:2015-01-07 21:42:32

标签: c# mysql stored-procedures combobox

我有一个带有标签和文本框的winform,用于将数据保存到mysql数据库,我添加了一个组合框,用于从我的存储过程中检索信息,该信息显示2列ID和名称。我的问题是如何使用我的存储过程的结果填充我的combobox1。  下面是我的c#代码

DELIMITER $$

USE `sms_pigen`$$

DROP PROCEDURE IF EXISTS `sp_clearing_agent`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `sp_clearing_agent`()
BEGIN
SELECT clearing_agent_id, clearing_agent_name
FROM tms_clearing_agents;
    END$$

DELIMITER ;

public partial class frmNewClient : Form
{
    MySqlConnection connection;
    MySqlCommand cmd;
    MySqlDataAdapter adp;
    DataSet cb = new DataSet();
    public frmNewClient()
    {
        InitializeComponent();
    }

    private void frmNewClient_Load(object sender, EventArgs e)
    {
    //    var connectionString = ConfigurationManager.ConnectionStrings["Pigen"].ConnectionString;

    //    connection = new MySqlConnection(connectionString);
    //    connection.Open();

    //    DataSet cb = new DataSet();

    }

    private void btnSubmitClients_Click_1(object sender, EventArgs e)
    {
        var connectionString = ConfigurationManager.ConnectionStrings["Pigen"].ConnectionString;

        connection = new MySqlConnection(connectionString);
        connection.Open();

        try
        {
            string CmdText = "INSERT INTO t_pi_Clients(ClientCode,ClientName,PostalAdd,Telephone,Fax,EmailAdd1,EmailAdd2,EmailAdd3,Website,TotalDeposit,AccountBal,ChargeRate)VALUES(@ClientCode, @ClientName, @PostalAdd, @Telephone, @Fax, @EmailAdd1, @EmailAdd2, @EmailAdd3, @Website, @TotalDeposit, @AccountBal, @ChargeRate)";
            MySqlCommand cmd = new MySqlCommand(CmdText, connection);
            cmd.Parameters.AddWithValue("@ClientCode", txtboxClientCode.Text);
            cmd.Parameters.AddWithValue("@ClientName", txtboxClientName.Text);
            cmd.Parameters.AddWithValue("@PostalAdd", txtboxPostalAddress.Text);
            cmd.Parameters.AddWithValue("@Telephone", txtboxTelephone.Text);
            cmd.Parameters.AddWithValue("@Fax", txtboxFax.Text);
            cmd.Parameters.AddWithValue("@EmailAdd1", txtboxEmailAddress1.Text);
            cmd.Parameters.AddWithValue("@EmailAdd2", txtboxEmailAddress2.Text);
            cmd.Parameters.AddWithValue("@EmailAdd3", txtboxEmailAddress3.Text);
            cmd.Parameters.AddWithValue("@Website", txtboxWebsite.Text);
            cmd.Parameters.AddWithValue("@TotalDeposit", txtboxTotalDepo.Text);
            cmd.Parameters.AddWithValue("@AccountBal", txtboxAccountBal.Text);
            cmd.Parameters.AddWithValue("@ChargeRate", txtboxChargeRate.Text);

            int result = cmd.ExecuteNonQuery();
            MessageBox.Show("Entry Saved");
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            return;
        }

2 个答案:

答案 0 :(得分:0)

这里是从Store过程检索数据并将数据绑定到comboBox的代码

        DataTable dtTest = new DataTable();
        SqlConnection con=new SqlConnection(ConnectionString);
        con.Open();
        SqlCommand cmd=new SqlCommand();
        cmd.CommandText="sp_clearing_agent";
        cmd.CommandType=CommandType.StoredProcedure;

        SqlDataAdapter sdaTest = new SqlDataAdapter(cmd);
        DataSet dsTest=new DataSet();
        sdaTest.Fill(dsTest);
        //binding data to combobox
        cmbTest.DataSource = dsTest.Tables[0];
        comboBox1.DataSource.DisplayMember="clearing_agent_id"
        comboBox1.DataSource.ValueMember="clearing_agent_name"
        comboBox1.DataBind();
        con.Close();

答案 1 :(得分:0)

在Form_Load命令中,创建连接和命令以通过storedprocedure检索数据。必须将CommandType设置为StoredProcedure,然后将此命令作为SelectCommand传递给MySqlDataAdapter。使用Fill检索数据后,将DataTable设置为组合框的数据源,并将DisplayMember和ValueMember设置为表的相应字段。

private void frmNewClient_Load(object sender, EventArgs e)
{
    var connectionString = ConfigurationManager.ConnectionStrings["Pigen"].ConnectionString;
    using(MySqlConnection cnn = new MySqlConnection(connectionString))
    using(MySqlCommand cmd = cnn.CreateCommand())
    {
        cnn.Open();
        cmd.CommandText = "sp_clearing_agent";
        cmd.CommandType = CommandType.StoredProcedure;
        DataTable dt = new DataTable();
        using(MySqlDataAdapter da = new MySqlDataAdapter(cmd))
        {
            da.Fill(dt);
            combobox.DisplayMember = "clearing_agent_name";
            combobox.ValueMember = "clearing_agent_id";
            combobox.DataSource = dt;

        }
    }
}

请注意,您不应该保留连接和适配器等全局对象。在需要时创建它们并在使用它们后立即销毁它们