//代码片段大致如下:Insert Into T_Users(UserName,UserPassword,ErrorTimes) output inserted.ID values(@userName, @userPassword, @errorTimes); //使用output inserted.ID是为了得到插入后最后一条记录的ID值cmd.Parameters.Add(new SqlParameter("userName", userName));
cmd.Parameters.Add(new SqlParameter("userPassword", userPassword));
cmd.Parameters.Add(new SqlParameter("errorTimes", errorTimes));
cmd.ExecuteNonQuery();
int id = Convert.ToInt32(cmd.ExecuteScalar()); //保存最后一条记录的ID,为什么每次执行完这条语句后,每一条记录都被插入了两次?
cmd.Parameters.Add(new SqlParameter("userPassword", userPassword));
cmd.Parameters.Add(new SqlParameter("errorTimes", errorTimes));
cmd.ExecuteNonQuery();
int id = Convert.ToInt32(cmd.ExecuteScalar()); //保存最后一条记录的ID,为什么每次执行完这条语句后,每一条记录都被插入了两次?
cmd.ExecuteScalar();
int id = Convert.ToInt32(cmd.ExecuteScalar()); 、、 又一次
cmd.ExecuteScalar();
Sql语句:
Insert Into T_Users(UserName,UserPassword,ErrorTimes) output inserted.ID values(@userName, @userPassword, @errorTimes); //使用output inserted.ID是为了得到插入后最后一条记录的ID值
select @@IDENTITY;C# 命令
cmd.Parameters.Add(new SqlParameter("userName", userName));
cmd.Parameters.Add(new SqlParameter("userPassword", userPassword));
cmd.Parameters.Add(new SqlParameter("errorTimes", errorTimes)); int id = Convert.ToInt32(cmd.ExecuteScalar()); //保存最后一条记录的ID,为什么每次执行完这条语句后,每一条记录都被插入了两次?
@@IDENTITY 返回为当前会话的所有作用域中的任何表最后生成的标识值。
SCOPE_IDENTITY 返回为当前会话和当前作用域中的任何表最后生成的标识值SCOPE_IDENTITY 和 @@IDENTITY 返回在当前会话中的任何表内所生成的最后一个标识值。但是,SCOPE_IDENTITY 只返回插入到当前作用域中的值;@@IDENTITY 不受限于特定的作用域。
SqlCommand.ExecuteNonQuery 方法:对连接执行 Transact-SQL 语句并返回受影响的行数。这两个方法都会执行查询,区别在于返回受影响的行数不同,这样我的插入语句就被执行了两次查询.