首页 > 解决方案 > 如何使用数据网格视图(Winforms、C#)更新 MySQL 表?

问题描述

我对 C#(以及一般的编码)非常陌生,并且在拼凑此处已发布的类似问题的答案时遇到了麻烦。

我正在 Visual Studio 2017 中开发一个 winforms C# 程序。目标是在数据网格中查看 MySQL 表的一组部分,编辑任何可见的值,然后在点击按钮时更新表中的更改。

我已成功连接到本地 MySQL 服务器,并在数据网格视图中显示现有数据(取决于输入的特定 SQL 查询):

//TITLE QUERY
public void runTitleQuery()
{

        string MySQLConnectionString = "datasource=10.1.1.110;port=3306;username=operator;password=;database=cortex;SslMode=none";
        MySqlConnection databaseConnection = new MySqlConnection(MySQLConnectionString);

        string TitleSearch = "SELECT * FROM titles WHERE TITLE_NO = @TenementNumber";

        try
        {
            MySqlCommand cmd = new MySqlCommand(TitleSearch, databaseConnection);
            cmd.CommandTimeout = 60;

            databaseConnection.Open();
            MySqlDataAdapter da = new MySqlDataAdapter(cmd);


            MySqlParameter TenNo = new MySqlParameter();
            TenNo.ParameterName = "@TenementNumber";
            TenNo.Value = textboxSearchByTitle.Text;

            cmd.Parameters.Add(@TenNo);

            DataTable dt = new DataTable();
            da.Fill(dt);

            SurfaceTable.DataSource = dt;
            databaseConnection.CloseAsync();

        }
        catch (Exception e)
        {
            MessageBox.Show("Query failed" + e.Message);
        }
    }

到目前为止,一切都很好。

我现在正在尝试允许编辑数据(如果可能,包括添加新行)。点击表格外的按钮后,编辑将被发送到服务器。

我认为我出错的地方是绑定和未绑定网格以及 SQL 连接(我仍然没有完全掌握)之间的某个地方。

表中的每个条目都有一个唯一标识符(列称为 TAS_ID)。

我的第一次尝试是按照以下方式做一些事情:

//Write table to server button
    private void button2_Click(object sender, EventArgs e)
    {

        string SQLCommandString = "UPDATE Tenements WHERE TAS_ID='@TASID'";

        try
            {
            //set string  
            string MySQLConnectionString = "datasource=10.1.1.110;username=operator;password=;database=cortex;SslMode=none";
            MySqlConnection databaseConnection = new MySqlConnection(MySQLConnectionString);

            MySqlCommand cmd2 = new MySqlCommand(SQLCommandString, databaseConnection);
            cmd2.CommandTimeout = 60;

            //Create parameters

            MySqlDataReader MyReader2;

            MyReader2 = cmd2.ExecuteReader();
            MessageBox.Show("Data Updated");
            while (MyReader2.Read())
            {
            }
            databaseConnection.CloseAsync();

        }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

但是,如您所见,我不知道如何使用新数据更新该行。我尝试创建与每一列相关的参数,但我觉得这不是正确的方法。

任何帮助将不胜感激!

如果需要任何进一步的信息,请告诉我。

谢谢。

标签: c#mysql

解决方案


如果我理解您的代码,我认为您的数据网格正在显示“titles”表的数据,而您正在尝试更新其他表“Tenements”

如果你的表有主键,你可以选择 MySqlCommandBuilder。以下链接可能对您有所帮助

http://www.mysqlab.net/knowledge/kb/detail/topic/c%23/id/4922


推荐阅读