我有一个表格,它使用两个表来插入数据。
表单中的某些列如下:
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);
}
答案 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);
}