C#MySql如何使用dataGridView绑定存储过程

时间:2017-10-24 23:20:29

标签: c# mysql stored-procedures datagridview

我这里有存储过程而且我不知道如何绑定到datagridview,需要帮助吗?

这里是mysql代码存储过程:

SELECT local, SUM(free), SUM(busy), SUM(pause)
FROM (
SELECT local.locations AS local,
CASE car_stat_loc.id_status WHEN 1 THEN 1 ELSE 0 END AS free,
CASE car_stat_loc.id_status WHEN 2 THEN 1 ELSE 0 END AS busy,
CASE car_stat_loc.id_status WHEN 3 THEN 1 ELSE 0 END AS pause
FROM local, car_stat_loc
WHERE local.id_loc = car_stat_loc.id_status
) AS a
GROUP BY local
ORDER BY local

这里调用存储过程的C#代码:

private void dataGridView3_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    connect.Open();
    MySqlCommand camd = connect.CreateCommand();
    camd.CommandText = "my_pr2";
    camd.CommandType = CommandType.StoredProcedure;

    MySqlDataReader rez;
    rez = camd.ExecuteReader(CommandBehavior.CloseConnection);
    dataGridView3.DataSource = rez;
    camd.ExecuteNonQuery();
    connect.Close();
}

如果我有错误,请帮忙解决,我是新来的!

2 个答案:

答案 0 :(得分:1)

首先为我的sql helper创建一个静态类

using System;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;

namespace MainVoteWeb.Helpers
{
    public static class MyHelper
    {
        private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["VoteContext"].ConnectionString;

        public static DataTable MyGetData(MySqlCommand command)
        {
            MySqlConnection connection = new MySqlConnection();
            MySqlDataAdapter adapter = new MySqlDataAdapter();
            DataTable data = new DataTable();

            try
            {
                connection.ConnectionString = ConnectionString;
                command.CommandTimeout = 500;
                command.Connection = connection;
                adapter.SelectCommand = command;

                adapter.Fill(data);
                return data;
            }
            catch (Exception e)
            {           
                return data;
            }
            finally
            {
                connection.Close();
            }
        }

        public static int MyExecuteNonQuery(MySqlCommand command)
        {
            MySqlConnection connection = new MySqlConnection();
            int rowsAffected = 0;

            try
            {
                command.CommandTimeout = 500;
                connection.ConnectionString = ConnectionString;
                connection.Open();
                command.Connection = connection;

                rowsAffected = command.ExecuteNonQuery();
                return rowsAffected.GetString();
            }
            catch (Exception e)
            {
                return 0;
            }
            finally
            {
                connection.Close();
            }
            return rowsAffected.ToString();
        }


    }
}
<{1>}在private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["VoteContext"].ConnectionString;中将“VoteContext”更改为连接字符串的名称 即

 <connectionStrings>
<add name="NewContext" connectionString="Server=127.0.0.1;Database=mysqlvotedb;user id=root; password=" providerName="MySql.Data.MySqlClient" />
</connectionStrings>

应命名为private static readonly string ConnectionString = ConfigurationManager.ConnectionStrings["NewContext"].ConnectionString;

然后按下按钮

private void dataGridView3_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    List<local> localList = new List<local>();
    MySqlCommand camd = new MySqlCommand();
    camd.CommandText = "my_pr2";
    camd.CommandType = CommandType.StoredProcedure;

    //NOTE: MyExecuteNonQuery is for INSERT UPDATE AND DELETE., MyGetData is for Select/Retrieve

    //if the stored procedure has parameter
    /*
        command.Parameters.AddWithValue("intLocalId", p.localId).Direction = ParameterDirection.Input;
        command.Parameters.AddWithValue("strLocalName", p.localName).Direction = ParameterDirection.Input;            
    */
    try
    {
        DataTable dt =  MyHelper.MyGetData(camd);
        foreach (DataRow row in dt.Rows)
        {
            local item = new local();

            item.localId = Convert.ToInt32(row["localId"]);
            item.localName = Convert.ToString(row["localName"]);
            item.localDetails = Convert.ToString(row["localDetails"]);

            localList .Add(item);
        }

    }

    dataGridView3.DataSource = localList ;
    dataGridView3.AutogenerateColumns = true;
    //no need to open and close the connection. the MyHelper did that already
    //camd.ExecuteNonQuery();
    //connect.Close();


}

ADVANTAGE:您可以将MyHelper类用于任何mysql操作,无论该类如何。只需提供存储过程的名称并执行它

答案 1 :(得分:0)

  

试试这个

cmd = new MySqlCommand("ur_sp_name", cn);
            cn.Open();
            cmd.CommandType = CommandType.StoredProcedure;
            DataSet ds = new DataSet();
            SqlDataAdapter sda = new SqlDataAdapter(cmd);
            Fill(ds);
            dg.DataSource = ds;
            dg.DataBind();
            cn.Close();