无法将数据从c#插入mysql数据库
我有这个问题。我在MySql中创建了两个表,它们通过外键连接在一起。我想从c#在表中插入数据 餐桌上的人无法将数据从c#插入mysql数据库,c#,mysql,C#,Mysql,我有这个问题。我在MySql中创建了两个表,它们通过外键连接在一起。我想从c#在表中插入数据 餐桌上的人 id-int,自动递增,主键 第一个名称-varchar 姓氏-varchar 表地址 id-自动递增,主键 城市-瓦查尔 steet_编号-varchar 人员id-外键 string mySqlString = "server=localhost;uid=root;pwd=root;database=address_book;"; MySqlConnection conn =
id-int,自动递增,主键
第一个名称-varchar
姓氏-varchar 表地址
id-自动递增,主键
城市-瓦查尔
steet_编号-varchar
人员id-外键
string mySqlString = "server=localhost;uid=root;pwd=root;database=address_book;";
MySqlConnection conn = new MySqlConnection(mySqlString);
try
{
conn.Open();
string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name)";
string insertAddress = "INSERT INTO addresses(city, street_number, persons_id) VALUES (@city, @street_number, @persons_id)";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
MySqlCommand secondCommand = new MySqlCommand(insertAddress, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
int id = Convert.ToInt32(command.LastInsertedId);
command.ExecuteNonQuery();
secondCommand.Parameters.AddWithValue("@city", TextBox3.Text);
secondCommand.Parameters.AddWithValue("@street_number", TextBox4.Text);
secondCommand.Parameters.AddWithValue("@persons_id", id);
secondCommand.ExecuteNonQuery();
}
catch (MySqlException ex)
{
MessageBox.Show(ex.Message);
}
finally
{
conn.Clone();
}
但这不起作用,我应该如何从主键中获取最后一个插入的值,以便在“persons_id”列中插入该值?也许我在别的地方错了 一次即可直接在查询中使用
LAST\u INSERT\u ID()
:
string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name);"
+ "INSERT INTO addresses(city, street_number,persons_id) VALUES (@city, @street_number, LAST_INSERT_ID());";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
command.Parameters.AddWithValue("@city", TextBox3.Text);
command.Parameters.AddWithValue("@street_number", TextBox4.Text);
command.ExecuteNonQuery();
或者,您可以运行两个命令,一个用于插入此人并检索ID,另一个用于插入地址:
string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name)";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
command.ExecuteNonQuery();
int id = Convert.ToInt32(command.LastInsertedId);
另一种方法是使用双重查询,如下所示:
string insertPerson = "INSERT INTO persons(first_name, last_name) VALUES (@first_name, @last_name); SELECT last_insert_id();";
MySqlCommand command = new MySqlCommand(insertPerson, conn);
command.Parameters.AddWithValue("@first_name", TextBox1.Text);
command.Parameters.AddWithValue("@last_name", TextBox2.Text);
int id = Convert.ToInt32(comm.ExecuteScalar());
然后,您可以在下一个查询中使用生成的
id
。看一看:您正在连接两个不带“;”的sql语句。相反,为什么不将这两条语句分开并在事务中执行呢?我尝试了这个,但这不是问题所在。我可以生成两个字符串和两个命令,但仍然会得到错误。问题是我不知道如何从列“table.id”中获取最后一个值。您应该将两个查询都放在单个事务范围中。第一个查询==您的一个演示
;第二次查询==然后运行第二次查询并使用id。
。您应该在单个事务中同时运行第一个和第二个。请更正您没有使用它-但是您告诉OP使用它,方法是说,然后运行您的2查询并使用id。
。因此,两个命令都在同一事务中运行是很重要的,这是我最初的建议。@Prix我编辑了代码,但现在我得到了一个新的错误。无法添加或更新子行:外键约束falls@PUDEV你做错了仔细看这个例子你正在放置int id=Convert.ToInt32(command.lastinerteded)代码>在命令.ExecuteNonQuery()之前代码>应该是之后,您也可以使用我答案中的第一个示例,它将一次性处理两个查询。