[英]Get the recent ID and insert it to another table in ASP.NET
请帮忙-我正在尝试从中获取userID
UserID
,然后将User
表中的UserID
插入Employee
表中,从而创建了一个简单的注册器。 我在线路上遇到错误
newID = (int)cmd.ExecuteScalar();
我的User
表有一个主键UserID
, Employee
表有一个列UserID
作为外键。
先感谢您!
这是我的register.cs
// instantiate
using (SqlConnection con = new SqlConnection(Helper.GetCon()))
{
int newID;
string query = @"INSERT INTO Users VALUES (@TypeID, @EmployeeId, @Username, @Password, @SecurityQuestion1, @SecurityAnswer1, @SecurityQuestion2, @SecurityAnswer2, @DateModified);SELECT CAST(scope_identity() AS int";
con.Open();
using (SqlCommand cmd = new SqlCommand(query, con))
{
cmd.Parameters.AddWithValue("@TypeID", ddlUserTypes.SelectedValue);
cmd.Parameters.AddWithValue("@Username", txtUsername.Text);
cmd.Parameters.AddWithValue("@Password", Helper.CreateSHAHash(txtPW.Text));
cmd.Parameters.AddWithValue("@SecurityQuestion1", ddlSec1.SelectedValue);
cmd.Parameters.AddWithValue("@SecurityAnswer1", txtSecAns1.Text);
cmd.Parameters.AddWithValue("@SecurityQuestion2", ddlSec2.SelectedValue);
cmd.Parameters.AddWithValue("@SecurityAnswer2", txtSecAns2.Text);
cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);
cmd.ExecuteNonQuery();
newID = (int)cmd.ExecuteScalar();
con.Close();
}
string query2 = @"INSERT INTO Employees VALUES (@FirstName, @MiddleName, @LastName, @EmployeeNumber, @Gender, @Birthdate, @Birthplace, @Nationality, @CivilStatus, @PermamentAddress, @PresentAddress, @ContactNumber, @Email, @Position, @Department, @Designation, @DateHired, @EmploymentStatus, @TIN, @SSS, @HDMF, @PHIC, @Supervisor, @Remarks, @Photo, @Attachments, @DateModified)";
using (SqlCommand cmd = new SqlCommand(query2, con))
{
cmd.Parameters.AddWithValue("@FirstName", txtFN.Text);
cmd.Parameters.AddWithValue("@MiddleName", txtMD.Text);
cmd.Parameters.AddWithValue("@LastName", txtLN.Text);
cmd.Parameters.AddWithValue("@EmployeeNumber", txtEmpNo.Text);
cmd.Parameters.AddWithValue("@Gender", ddlGender.SelectedValue);
cmd.Parameters.AddWithValue("@Birthdate", txtbdate.Text);
cmd.Parameters.AddWithValue("@Birthplace", txtBP.Text);
cmd.Parameters.AddWithValue("@Nationality", txtNat.Text);
cmd.Parameters.AddWithValue("@CivilStatus", ddlCIv.SelectedValue);
cmd.Parameters.AddWithValue("@PermamentAddress", txtPermAdd.Text);
cmd.Parameters.AddWithValue("@PresentAddress", txtPreAdd.Text);
cmd.Parameters.AddWithValue("@ContactNumber", txtContactNo.Text);
cmd.Parameters.AddWithValue("@Email", txtEmail.Text);
cmd.Parameters.AddWithValue("@Position", txtPosi.Text);
cmd.Parameters.AddWithValue("@Department", txtDept.Text);
cmd.Parameters.AddWithValue("@Designation", txtDesig.Text);
cmd.Parameters.AddWithValue("@DateHired", txtdateh.Text);
cmd.Parameters.AddWithValue("@EmploymentStatus", txtEmpl.Text);
cmd.Parameters.AddWithValue("@TIN", txtTin.Text);
cmd.Parameters.AddWithValue("@SSS", txtSSS.Text);
cmd.Parameters.AddWithValue("@HDMF", txtPhilH.Text);
cmd.Parameters.AddWithValue("@PHIC", txtPag.Text);
cmd.Parameters.AddWithValue("@Supervisor", txtSuper.Text);
cmd.Parameters.AddWithValue("@Remarks", txtRemarks.Text);
string fileName = DateTime.Now.ToString("yyyyMMddHHmmss-") + fuImage.FileName;
cmd.Parameters.AddWithValue("@Photo", fileName);
fuImage.SaveAs(Server.MapPath("~/EmployeeData/Images/" + fileName));
string attachments = DateTime.Now.ToString("yyyyMMddHHmmss-") + fuAttach.FileName;
cmd.Parameters.AddWithValue("@Attachments", attachments);
fuAttach.SaveAs(Server.MapPath("~/EmployeeData/Attachments/" + attachments));
cmd.Parameters.AddWithValue("@DateModified", DateTime.Now);
cmd.ExecuteNonQuery();
con.Close();
}
}
我不确定这段代码是如何在您所说的那行发生错误的,因为我希望在提到的那一行发生错误。 这里有各种各样的提示,太长了,无法发表评论。 我希望他们能解决问题,如果没有解决,那么第一点将帮助您找到答案。
cmd.ExecuteNonQuery()
,它将执行命令并插入记录。 然后执行cmd.ExecuteScalar()
,它将再次执行命令,并插入另一条记录。 删除cmd.ExecuteNonQuery()
,因为您需要从ExecuteScalar
返回标识值。 cmd.ExecuteNonQuery()
工作方式(必须这样做,除非您误以为它告诉我们它在下一行崩溃了),因为查询中有错字,结尾缺少右括号SELECT CAST(scope_identity() AS int
。 Close
连接(永远),因为它处于using
块中。 当它退出该块时,隐式Dispose
将调用Close
。 @DateModified
值DateTime.Now
,它是一个“本地”时间(请查看Kind
属性)。 当您从SQL读回值时,除非调用SpecifyKind,否则它将不是本地时间,从而导致差异。 总是更安全地将值存储和读取为UTC(通过使用此处的DateTime.UtcNow
和读取时指定的UTC)或切换为使用DateTimeOffset。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.