繁体   English   中英

获取最近的ID并将其插入ASP.NET中的另一个表

[英]Get the recent ID and insert it to another table in ASP.NET

请帮忙-我正在尝试从中获取userID UserID ,然后将User表中的UserID插入Employee表中,从而创建了一个简单的注册器。 我在线路上遇到错误

newID = (int)cmd.ExecuteScalar();

我的User表有一个主键UserIDEmployee表有一个列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();
    }
}

我不确定这段代码是如何在您所说的那行发生错误的,因为我希望在提到的那一行发生错误。 这里有各种各样的提示,太长了,无法发表评论。 我希望他们能解决问题,如果没有解决,那么第一点将帮助您找到答案。

  1. 当寻求有关错误的帮助时,请发布您收到的错误。 这是诊断错误重要的事情。
  2. 错误之前的行是cmd.ExecuteNonQuery() ,它将执行命令并插入记录。 然后执行cmd.ExecuteScalar() ,它将再次执行命令,并插入另一条记录。 删除cmd.ExecuteNonQuery() ,因为您需要从ExecuteScalar返回标识值。
  3. 我不确定cmd.ExecuteNonQuery()工作方式(必须这样做,除非您误以为它告诉我们它在下一行崩溃了),因为查询中有错字,结尾缺少右括号SELECT CAST(scope_identity() AS int
  4. 我们停止使用AddWithValue吗
  5. 无需Close连接(永远),因为它处于using块中。 当它退出该块时,隐式Dispose将调用Close
  6. 考虑添加一个事务。 您正在做两个单独的插入。 如果第二条记录失败,则将剩下数据库中的第一条记录。 如果您在两个命令周围都使用事务,那么它们要么都进入,要么都不进入。
  7. 您正在传递@DateModifiedDateTime.Now ,它是一个“本地”时间(请查看Kind属性)。 当您从SQL读回值时,除非调用SpecifyKind,否则它将不是本地时间,从而导致差异。 总是更安全地将值存储和读取为UTC(通过使用此处的DateTime.UtcNow和读取时指定的UTC)或切换为使用DateTimeOffset。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM