C# 将多个数据插入到两个表中,并且需要将最后插入的id插入到另一个表中

C# 将多个数据插入到两个表中,并且需要将最后插入的id插入到另一个表中,c#,asp.net,C#,Asp.net,我有一个表单,它使用两个表来插入数据 表格中的某些列如下所示: scholarship name, course, year 涉及的两个表格是: scholarshipDetail , scholarshipCourse. scholarshipDetail表包含scholarshipName和年份 scholarshipCourse表中有scholarshipID,course 奖学金详情: schid schName year -------------------

我有一个表单,它使用两个表来插入数据

表格中的某些列如下所示:

scholarship name, course, year
涉及的两个表格是:

scholarshipDetail , scholarshipCourse.
  • scholarshipDetail
    表包含scholarshipName和年份
  • scholarshipCourse
    表中有scholarshipID,course
奖学金详情:

schid      schName     year
-----------------------------
1          star         2015
2          moon         2016
学术课程:

schID    course
------------------
1        maths
1        english
2        maths
假设新用户想要添加新的奖学金,这意味着id将为3,并插入到两个表中。我该怎么做?(已成功插入ALR)

新错误: 编辑

我表中的输出是

表1

schID     schname
-------------------
1            jj
2            jj
表2

TableID     schID       Course
------------------------------
1            2          Maths
数据在表1中插入了两次。为什么会这样?(已解决)

编辑:

现在的问题是,将有复选框,允许用户选择哪门课程适用于奖学金

当用户单击“全部”复选框时,只有最后一个复选框将插入数据库

在我的代码隐藏(cs)中:


您正在执行该命令两次

int i = cmd.ExecuteNonQuery();

var table1Id = (int)cmd.ExecuteScalar();

您只需要执行一个。我认为删除cmd.ExecuteNoteQuery可以解决您的问题。

了解您发布的最新问题。 在所有if块之后,只调用一次obj.test方法

因此,“course”变量将具有来自条件为true的最新if块的值

您需要调用DataTable dt=obj.test(名称,课程);方法在每个if块中。这意味着,若选中该复选框,则调用“插入行”。如果未选中,则不插入行。 以下是您应该在单击按钮时输入的代码

string course = "";
string Name = schName.Text;
scholarshipBLL obj = new scholarshipBLL();

List<addScholarship> addScholarshipList= new List<addScholarship>();

addScholarship scholarship;
if (DIT.Checked )
{
    scholarship = new addScholarship(Name,course);
    addScholarshipList.Add(insertedName);
    course = "DIT";
    DataTable dt = obj.test(Name, course);

}

if (DFI.Checked)
{
    scholarship = new addScholarship(Name,course);
    addScholarshipList.Add(insertedName);
    course = "DFI";
    DataTable dt = obj.test(Name, course);

}
string课程=”;
字符串名称=schName.Text;
scholarshipBLL obj=新scholarshipBLL();
List addScholarshipList=新列表();
奖学金;
如果(DIT.Checked)
{
奖学金=新增奖学金(姓名、课程);
addScholarshipList.Add(插入名称);
课程=“DIT”;
数据表dt=目标测试(名称、课程);
}
如果(已检查DFI)
{
奖学金=新增奖学金(姓名、课程);
addScholarshipList.Add(插入名称);
课程=“DFI”;
数据表dt=目标测试(名称、课程);
}

假设新用户想要添加新奖学金,这意味着id将为3,并插入到两个表中——您的
scholarshipDetail
表是否具有
自动递增
属性?如果是这样的话,您的insert将始终为新行条目的id提供
+1
。这样,您可能希望使用。。但是,如果两个人真的使用这个系统呢?答案属于数据库事务。是的,它有自动递增功能。因此,SCID实际上是每次添加新奖学金时自动增加的。问题是如何将新id插入我的scholarshipCourse表中。至于现在,我能够插入到两个表中。但是我的schID在scholarshipCourse是空的,我正在使用asp.net供参考:)啊,对不起@skylight,嗯。。我认为最好使用实体框架,而不是简单的查询,这样会更简单,但我从未尝试过。您如何将选中的复选框值从UI传递给代码?您使用所有选中复选框值的逻辑是什么?请确保scholarshipDetail中的schid是自动递增的。请查看上述问题。我已经编辑了,它成功地插入了最后一个id。但是,在我的数据库中,它插入了两次。EG将在上面的“SalaWaunaMaar”中解释,在代码中没有错误,我假设公共DATABATE测试运行2次,尝试调试,虽然这个代码可能解决这个问题,但是我们应该总是考虑添加一个解释。现在在我的数据库中,它给我空的。不为null且没有值。原因可能是什么@Chetanranpariya基于您的回答:有两个insertName。我相信对于addScholarship insertName应该是insertedName?抱歉。。代码中有一个小问题。但从代码中可以清楚地看出,调用obj.Test方法后,course变量被分配了实际值,这就是为什么它在数据库中变为空白的原因。不确定您如何无法获取此信息。关于变量名问题。我用有意义的变量名更正了代码。重新培训:您报告的两个问题都是由于代码中的逻辑问题造成的。因此,请尝试调试代码,了解行为的逻辑和原因,并在联机查找答案之前解决它。这将节省您和其他人的大量时间。是的,我知道为什么它被插入为空,因为我已经声明了变量。现在,它已成功地添加到相应的复选框中。但我面临另一个问题。当我点击两个复选框时,我仍然无法将这两个课程都插入数据库@切塔兰帕里亚
BEGIN;

  INSERT INTO scholarshipDetail(schid,schName,year)  VALUES(3,'sun',2017);

  INSERT INTO scholarshipCourse(schID,course) VALUES(LAST_INSERT_ID(),'science');

COMMIT;
int i = cmd.ExecuteNonQuery();

var table1Id = (int)cmd.ExecuteScalar();
string course = "";
string Name = schName.Text;
scholarshipBLL obj = new scholarshipBLL();

List<addScholarship> addScholarshipList= new List<addScholarship>();

addScholarship scholarship;
if (DIT.Checked )
{
    scholarship = new addScholarship(Name,course);
    addScholarshipList.Add(insertedName);
    course = "DIT";
    DataTable dt = obj.test(Name, course);

}

if (DFI.Checked)
{
    scholarship = new addScholarship(Name,course);
    addScholarshipList.Add(insertedName);
    course = "DFI";
    DataTable dt = obj.test(Name, course);

}