首页 > 解决方案 > 如何使用外键关系同时向两个表中插入新记录

问题描述

我正在尝试同时向两个表中插入值。我有一个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();

标签: c#sqlsql-server

解决方案


选项1

对数据库使用实体框架或任何ORM

不推荐此选项

解决这个问题

步骤 1 修改您的SQL 查询

检查执行插入命令并在 Sql 中返回插入的 Id

在学生查询中添加以下行

output INSERTED.<Student_Table_Primary_Key_Column_Name> 

步骤 2cm.ExecuteNonQuery()替换为

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

步骤 3Guardian表中添加stdid

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

推荐阅读