数据库中User表有三个字段
UID int 标示 自动加1(自增长类型的)
Name varchar(50)
PassWord varchar(50)
现在要往表里插入一条记录,插入成功的同时返回自动插入的UID的值
要求sql语句要写在程序里,不能用存储过程,用存储过程返回值的话我也会!我现在程序是这样写的,请各位指点一下加上几行,把UID的值返回!
private string m_InsertUserSQL = @"insert into Users values(@Name,@PassWord)"SqlCommand cmd = new SqlCommand();
cmd.Parameters.Add(new SqlParameter("@Name",SqlDbType.VarChar,50));
cmd.Parameters.Add(new SqlParameter("@PassWord",SqlDbType.VarChar,50));
cmd.Parameters["@Name"].Value = _SUserData.LoginName.ToString().Trim();
cmd.Parameters["@PassWord"].Value = _SUserData.PassWord.ToString().Trim();using (SqlConnection conn = SCommonClass.SystemData.GetConnection())
{
 conn.Open();
 using(System.Data.SqlClient.SqlTransaction trans = conn.BeginTransaction())
{
 try
 {
   cmd.CommandText = this.m_InsertUserSQL;
   cmd.CommandType = CommandType.Text;
   cmd.Transaction = trans ;
   cmd.Connection = conn;
   cmd.ExecuteNonQuery();
   trans .Commit();
 }
         catch(System.Exception ex)
{
   trans.Rollback();
}
finally
{
   conn.Close();
}
   }
}

解决方案 »

  1.   

    cmd.CommandText = "SELECT @@IDENTITY AS UID";
    int UID = (int)cmd.ExecuteScalar();
      

  2.   

    select MAX(UID) from table
      

  3.   

    cmd.CommandText = "insert into Users values(@Name,@PassWord) SELECT @@IDENTITY AS UID";
    int UID = (int)cmd.ExecuteScalar();多条SQL语句使用一个 Command 执行是可以的,试一试~
      

  4.   

    不行啊
    当执行到int UID = (int)cmd.ExecuteScalar();时,就会抛出"指定转换无效"的异常!
      

  5.   

    肯定不能 select MAX(UID) from table 这样了,如果这样的话就等于重新select了一次,
    以前用存储过程可以直接用output返回,现在不用存储过程了不知道该怎么办
      

  6.   

    可以了
    不过要这样转换
    int UID = Convert.ToInt32(cmd.ExecuteScalar());
    谢谢拉
      

  7.   

    SELECT @@IDENTITY 注意用这个系统变量时需要在添加记录时加事务不然可能取的不是自己的。
      

  8.   

    SELECT @@IDENTITY 注意用这个系统变量时需要在添加记录时加事务不然可能取的不是自己的。如果我直接把int UID = Convert.ToInt32(cmd.ExecuteScalar());添加进去然后在  trans .Commit();
    不行吗?
      

  9.   

    select @@IDentity
    在新增的语句后加上这么一句做为返回参数