【问题标题】:How to insert new records to two tables at the same time with foreign key relationship [duplicate]如何使用外键关系将新记录同时插入两个表[重复]
【发布时间】:2020-07-14 13:39:37
【问题描述】:

我正在尝试同时向两个表中插入值。我有一个dbo.Studentdbo.Guardian。 Guardian 表有一个外键 studentID。我正在尝试向其中插入值,但它始终显示为 NULL。我试图通过单击按钮同时插入学生信息和监护人信息。请帮忙

//Save student information
cn.Open();
cm = new SqlCommand("INSERT INTO Student (studentNo, Lname, Fname, MI, gender, yearLevel, section, studImage, isActive)  VALUES (@studentNo, @Lname, @Fname, @MI, @gender, @yearLevel, @section, @studImage, 'true')", cn);
cm.Parameters.AddWithValue("@studentNo", txtStudentNo.Text);
cm.Parameters.AddWithValue("@Lname", txtLname.Text);
cm.Parameters.AddWithValue("@Fname", txtFname.Text);
cm.Parameters.AddWithValue("@MI", txtMI.Text);
cm.Parameters.AddWithValue("@gender", gender);
cm.Parameters.AddWithValue("@yearLevel", txtYear.Text);
cm.Parameters.AddWithValue("@section", txtSection.Text);
cm.Parameters.AddWithValue("@studImage", img);
cm.ExecuteNonQuery();
cn.Close();


//Save guardian information
cn.Open();
cm = new SqlCommand("INSERT INTO Guardian (studentID, name, address, contactNo) VALUES (@studentID, @name, @address, @contactNo)", cn);
cm.Parameters.AddWithValue("@name", txtGuardianName.Text);
cm.Parameters.AddWithValue("@address", txtAddress.Text);
cm.Parameters.AddWithValue("@contactno", txtContactNo.Text);
cm.ExecuteNonQuery();
cn.Close();

【问题讨论】:

  • 用您正在使用的数据库标记您的问题。我也不推荐AddWithValue。最好明确说明类型。
  • @GordonLinoff 我已经编辑了我的标签,谢谢

标签: c# sql sql-server


【解决方案1】:

选项 1

对数据库使用 Entity Framework 或任何 ORM

不推荐此选项

解决这个问题

第 1 步 修改了您的 SQL 查询

查看Execute Insert command and return inserted Id in Sql

学生查询

中添加以下行
output INSERTED.<Student_Table_Primary_Key_Column_Name> 

第 2 步cm.ExecuteNonQuery() 替换为

//Return Inserted Student Table ID
int stdid =(int)cm.ExecuteScalar();

第 3 步Guardian 表中添加 stdid

// set Student ID in Guardian Table
cm.Parameters.AddWithValue("@studentID", stdid);

【讨论】:

  • 虽然此代码可能会解决问题,但 including an explanation 关于如何以及为何解决问题将真正有助于提高您的帖子质量,并可能导致更多的赞成票。请记住,您正在为将来的读者回答问题,而不仅仅是现在提问的人。请edit您的答案添加解释并说明适用的限制和假设。
  • 我不相信int stdid =(int)cm.ExecuteScalar();会返回id,除非你修改sql调用。
  • 你好,它说无效的列名 ID
  • 不知道哪里做错了
  • 输出插入。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-20
  • 1970-01-01
  • 2021-02-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多