将多个数据插入两个表,并需要将最后插入的id插入另一个表

时间:2017-01-20 01:52:43

标签: c# asp.net

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

表单中的某些列如下:

scholarship name, course, year

涉及的两个表是:

scholarshipDetail , scholarshipCourse.
  • scholarshipDetail表有奖学金名称和年份
  • scholarshipCourse表有奖学金ID,课程

scholarshipDetail:

schid      schName     year
-----------------------------
1          star         2015
2          moon         2016

scholarshipCourse:

schID    course
------------------
1        maths
1        english
2        maths

假设新用户想要添加新奖学金,这意味着id将为3并且它将插入到两个表中。我怎么样? (管理以插入ALR)

新错误: EDITED

public DataTable test(string name, string course)
{
    string insertsql = "INSERT INTO Table1(schName) OUTPUT INSERTED.addID  values (@schName)";

    SqlCommand cmd = new SqlCommand(insertsql,conn);

    cmd.Parameters.AddWithValue("@schName", name);

    conn.Open();
    int i = cmd.ExecuteNonQuery();

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

    string insertsql1 = "INSERT INTO Table2(ScholarshipID, DiplomaCourse) VALUES (@id, @course)";

    SqlCommand cmd2 = new SqlCommand(insertsql1, conn);
    cmd2.Parameters.AddWithValue("@id", table1Id);
    cmd2.Parameters.AddWithValue("@course", course);

    SqlDataAdapter da = new SqlDataAdapter();
    da.SelectCommand = cmd;

    da.SelectCommand = cmd2;
    DataTable dt = new DataTable();
    da.Fill(dt);

    return dt;
}

我表中的输出是

表1

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

表2

TableID     schID       Course
------------------------------
1            2          Maths

数据在Table1中插入两次。为什么会这样? (解决)

编辑:

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

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

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

protected void Button1_Click(object sender, EventArgs e)
{
      //  addScholarship[] test = new addScholarship[1];

        string course = "";
        string Name = schName.Text;

        if (DIT.Checked )
        {
            course = "DIT";
        }

        if (DFI.Checked)
        {
            course = "DFI";
        }

        addScholarship[] insertName = new addScholarship[1];
        addScholarship insertedName = new addScholarship(Name,course);

        scholarshipBLL obj = new scholarshipBLL();
        DataTable dt = obj.test(Name, course);
}

3 个答案:

答案 0 :(得分:0)

public IHttpActionResult Get()

答案 1 :(得分:0)

您正在执行该命令两次。

int i = cmd.ExecuteNonQuery();

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

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

答案 2 :(得分:0)

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

因此“course”变量将具有条件为真的最新if块的值。

你需要调用DataTable dt = obj.test(Name,course);每个if块中的方法。这意味着如果选中复选框,则调用插入行。如果未选中,则不插入行。 以下是您应该在button_click中添加的代码。

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);

}