我想在获取最后插入的id时插入两个表,然后将其添加到第二个表中。我已经尝试过使用ExecuteNonScalar,但它没有用。这是我的代码:
string iquery = "insert into [User] (username, password, role) values (@username,@password,@role)";
SqlCommand cmd = new SqlCommand(iquery, conn);
cmd.Parameters.AddWithValue("@username", username);
cmd.Parameters.AddWithValue("@password", password);
cmd.Parameters.AddWithValue("@role", "Customer");
cmd.ExecuteNonQuery();
//get last insert User ID, insert into borrower
int id = Convert.ToInt32(cmd.ExecuteScalar());
string iquery2 = "insert into [borrower] (userid, name, phone, email, type) values (@id, @name, @phone, @email, @type)";
SqlCommand cmd1 = new SqlCommand(iquery2, conn);
cmd1.Parameters.AddWithValue("@id", id);
cmd1.Parameters.AddWithValue("@name", name);
cmd1.Parameters.AddWithValue("@phone", phone);
cmd1.Parameters.AddWithValue("@email", email);
cmd1.Parameters.AddWithValue("@type", type);
cmd1.ExecuteNonQuery();
当我编译并运行代码时,插入的id为0.任何想法我做错了什么?
答案 0 :(得分:3)
你应该改变你的sql语句:
string iquery = "insert into [User]
(username, password, role)
values (@username,@password,@role)
select scope_identity()";
基本上,SCOPE_INDETITY
返回插入标识列的最后一个标识值 相同的范围。
有关详细信息,请查看here。
此外,您
之前不需要cmd.ExecuteNonQuery();
int id = Convert.ToInt32(cmd.ExecuteScalar());