C# 获取最近的ID并将其插入到ASP.NET中的另一个表中
请帮助-我正在创建一个简单的注册表,我正在尝试获取C# 获取最近的ID并将其插入到ASP.NET中的另一个表中,c#,asp.net,sql-server,C#,Asp.net,Sql Server,请帮助-我正在创建一个简单的注册表,我正在尝试获取用户ID,并将用户表中的用户ID插入员工表中。我在线路上出错了 newID = (int)cmd.ExecuteScalar(); 我的User表有一个主键UserID,Employee表有一列UserID作为外键 提前谢谢你 这是我的注册表 // instantiate using (SqlConnection con = new SqlConnection(Helper.GetCon())) { int newID;
用户ID
,并将用户
表中的用户ID
插入员工
表中。我在线路上出错了
newID = (int)cmd.ExecuteScalar();
我的User
表有一个主键UserID
,Employee
表有一列UserID
作为外键
提前谢谢你
这是我的注册表
// 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()
是如何工作的(它必须这样做,除非您在下一行错误地告诉我们它崩溃了),因为查询中有一个输入错误,在选择CAST(scope\u identity()AS int
结尾缺少右括号关闭
连接,因为它位于使用
块中。当它退出该块时,隐式处理
将调用关闭
@DateModified
值DateTime。现在
,这是一个“本地”时间(请查看种类
属性)。从SQL读回该值时,除非调用SpecifyKind,否则该值不会是本地时间,从而导致差异。始终以UTC格式存储和读取该值更安全(在此处使用DateTime.UtcNow
,并在读取时指定kind UTC)或切换到使用DateTimeOffset发布错误消息。尝试删除第一个命令中的cmd.ExecuteNonQuery();执行第一个sql命令后删除
con.Close();
。无需关闭连接,因为我看不到您在执行第二个sql命令之前打开连接。选择CAST(scope_identity()由于int
=>缺少一个括号,这是语法错误。请尝试选择强制转换(SCOPE_IDENTITY()AS int)
。您最好在或中进行这一复合查询