c# - 如何使用外键关系同时向两个表中插入新记录
问题描述
我正在尝试同时向两个表中插入值。我有一个dbo.Student
和dbo.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();
解决方案
选项1
对数据库使用实体框架或任何ORM。
不推荐此选项
解决这个问题
步骤 1 修改您的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);
推荐阅读
- microsoft-graph-api - Microsoft Office 365 单点登录
- ethereum - 检索 web3 contract.ownerOf NFT ERC721
- angular - 使用角度材料创建一个包含反应形式和表格的模态弹出窗口
- r - 是否可以在 R 中过滤 corrplot/cormatrix?
- html - 如何使css中文本的bg颜色跨越整个屏幕的宽度
- php - 重定向 URL 中的 PHP 爬虫
- angular - 内部/模块/cjs/loader.js:883 抛出错误
- sql - 选择查询以获取带有动态列的结果集
- ios - SwiftUI 中的表单关闭侦听器
- web-scraping - 使用 BeautifulSoup 抓取网页,为什么没有输出?