C# MySql如何将存储过程与dataGridView绑定(bind)

标签 c# mysql stored-procedures datagridview

我这里有存储过程,但我不知道如何绑定(bind)到 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();
}

如果我有错误,请帮助纠正,我是新来的!

最佳答案

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

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();
        }


    }
}

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();


}

优点:你可以使用MyHelper类来进行任何mysql操作,不管是哪个类。只需提供存储过程的名称并执行它

关于C# MySql如何将存储过程与dataGridView绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46921454/

相关文章:

sql - 获取分页 SQL 搜索存储过程的计数

c# - 为什么 LINQ 返回的列值不是预期的?

mysql - MySQL 上的极慢选择查询

postgresql - 尝试创建一个存储过程将数据插入postgresql数据库 - 如何自动输入主键?

MySQL OUTER LEFT JOIN 性能

mysql - 合并来自一个表的计数和不同于另一个表的计数

sql - 从 SP 调用同一架构内的存储过程

c# - 正则表达式以验证逗号分隔的字符串

c# - 检查表是否存在于c#

c# - 如果我想将类型约束 (T=int) 方法添加到泛型 (T) 类中,是否必须创建扩展方法?