c# - 如何使用数据网格视图(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);
}
}
但是,如您所见,我不知道如何使用新数据更新该行。我尝试创建与每一列相关的参数,但我觉得这不是正确的方法。
任何帮助将不胜感激!
如果需要任何进一步的信息,请告诉我。
谢谢。
解决方案
如果我理解您的代码,我认为您的数据网格正在显示“titles”表的数据,而您正在尝试更新其他表“Tenements”
如果你的表有主键,你可以选择 MySqlCommandBuilder。以下链接可能对您有所帮助
http://www.mysqlab.net/knowledge/kb/detail/topic/c%23/id/4922