如何获取最后一个插入ID?

时间:2017-01-11 23:09:44

标签: c# sql

我想在获取最后插入的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.任何想法我做错了什么?

1 个答案:

答案 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());