【问题标题】:C# MySql how to bind stored procedure with dataGridViewC# MySql如何将存储过程与dataGridView绑定
【发布时间】:2017-10-24 23:20:29
【问题描述】:

我这里有存储过程,我不知道如何绑定到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-server != mysql
  • 你能告诉我本地课的样子吗?
  • 仅限MySql服务器

标签: c# mysql stored-procedures datagridview


【解决方案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();
        }


    }
}

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 操作,而不管该类。只需提供存储过程的名称并执行它即可

【讨论】:

  • 非常感谢您现在就去看看!
  • 我可以调用任何其他存储过程,比不带过程直接连接mysql更安全?
  • 是的,你可以。我一直在我的所有课程和整个项目中使用它
  • 我不明白这种减少,即?
  • 在我的 yahoo (craymel_sylph@yahoo.com) 上给我发消息,我会尝试发送示例
【解决方案2】:

试试这个

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

【讨论】:

  • 非常感谢您尝试一下! :))
猜你喜欢
  • 2020-05-21
  • 2011-04-02
  • 2017-03-20
  • 1970-01-01
  • 1970-01-01
  • 2021-09-19
  • 2013-01-01
  • 1970-01-01
  • 2019-12-06
相关资源
最近更新 更多