Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法将数据从c#插入mysql数据库_C#_Mysql - Fatal编程技术网

无法将数据从c#插入mysql数据库

无法将数据从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 =

我有这个问题。我在MySql中创建了两个表,它们通过外键连接在一起。我想从c#在表中插入数据

餐桌上的人
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()之前应该是之后,您也可以使用我答案中的第一个示例,它将一次性处理两个查询。