【发布时间】:2019-07-14 11:08:05
【问题描述】:
在这种情况下,我将值从 Projects 表中显示到 datagridview 中,它只有 2 列:
PROJECT_NAME VARCHAR
ID INT // Which is hidden in datagridview, and as AUTOINCREMENT
我已经在这个表中编辑了值,它工作正常:
private void dataGridView4_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
string name_project = dataGridView4.Rows[e.RowIndex].Cells[e.ColumnIndex].Value.ToString();
string id = dataGridView4.Rows[e.RowIndex].Cells[0].Value.ToString();
MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
MySqlCommand cmd = new MySqlCommand("UPDATE projekt1.projects SET PROJECTS_NAME = @PROJECTS_NAME WHERE ID = @ID", connection);
cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = int.Parse(id);
cmd.Parameters.Add("@PROJECTS_NAME", MySqlDbType.VarChar).Value = name_project;
try
{
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但是我在插入新行并在数据库中自动保存时遇到问题。
我试过什么?
1) 我已经尝试过RowValidated 事件:
private void dataGridView4_RowValidated(object sender, DataGridViewCellEventArgs e)
{
string name_project = dataGridView4.Rows[e.RowIndex].Cells[1].Value.ToString();
string id = dataGridView4.Rows[e.RowIndex].Cells[0].Value.ToString();
MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
MySqlCommand cmd = new MySqlCommand("INSERT INTO projekt1.projects(PROJECT_NAME) VALUES(@NPROJECT_NAME);", connection);
cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = int.Parse(id);
cmd.Parameters.Add("@PROJECT_NAME", MySqlDbType.VarChar).Value = name_project;
try
{
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("ok");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
try
{
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
但它没有工作,因为
System.FormatException: "输入字符串格式无效。"
2) 我也尝试过 UserAddedRow 事件:
private void dataGridView4_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
string name_project= e.Row.Cells[1].Value.ToString();
int id = (int)Convert.ToInt64(e.Row.Cells[0].Value.ToString());
MySqlConnection connection = new MySqlConnection("datasource = localhost; port = 3306; username = root; password = ");
MySqlCommand cmd = new MySqlCommand("INSERT INTO projekt1.projects(PROJECT_NAME) VALUES(@NPROJECT_NAME);", connection);
cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;
cmd.Parameters.Add("@PROJECT_NAME", MySqlDbType.VarChar).Value = name_project;
try
{
connection.Open();
cmd.ExecuteNonQuery();
connection.Close();
MessageBox.Show("ok");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
但在下面有这个例外:
System.NullReferenceException:对象引用尚未设置 到对象的实例。 System.Windows.Forms.DataGridViewCell.Value.get 返回 null。”
然后我尝试删除 2 行代码:
int id = (int)Convert.ToInt64(e.Row.Cells[0].Value.ToString());
cmd.Parameters.Add("@ID", MySqlDbType.Int64).Value = id;
它没有帮助。
有人能写出如何解决吗?我已经搜索了一些东西,但我不知道如何处理。问候。
【问题讨论】:
-
表名和列名
INSERT INTO projekt1.projects (PROJECT_NAME) VALUES (@NPROJECT_NAME);中缺少空格。如果不起作用,则发生在哪一行错误 -
没有需要手动更新数据库。使用 DataSource,DataAdapter 将为您完成。另一种方法是使用 ORM。使用它们中的任何一个都不需要这些代码。
-
@MangeshAuti 我不认为这与缺少表名和列名有关,因为与 System.NullReferenceException:“对象引用尚未设置为对象的实例有关。”。它显示在以下行:
string name_project= e.Row.Cells[1].Value.ToString(); -
第一个方法怎么样?哪一行错误来了
-
什么样的方法?
RowValidated?我认为只有当我更新某个 ID 的值时。
标签: c# mysql .net datagridview insert