try
            {
                conn.Open();
                SqlCommand comm = conn.CreateCommand();
                SqlTransaction transaction = conn.BeginTransaction();
                comm.Transaction = transaction;                comm.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + ")";
                comm.ExecuteNonQuery();                comm.CommandText = "SELECT @@IDENTITY From Dept";
                int newDeptID = (int)comm.ExecuteScalar();                transaction.Commit();
                conn.Close();                deptinfo.DeptID = newDeptID;
                return deptinfo;
            }
            catch (Exception ex)
            {
                throw ex;
            }

解决方案 »

  1.   

    是不是在两个sql之间多加了一句comm.ExecuteNonQuery();
      

  2.   

    如下去写
    comm.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + "); "
    + " SELECT @@IDENTITY From Dept";
    int newDeptID = (int)comm.ExecuteScalar();即把两句合为一句进行执行。
      

  3.   

    你的两句sql是分别放在两句执行的:
    comm.ExecuteNonQuery();
    int newDeptID = (int)comm.ExecuteScalar();由于需要两次连接数据库,并提交sql语句执行,所以你不可能得到你想要的@@identity的,因为两次执行动作不在一个线程里面。
    就好比你在查询分析器里,打开两个窗口,依次分别执行的结果一样。如果你需要获得@@identity,你可以用存储过程执行插入操作,并用output参数将@@identity返回来。
      

  4.   

    你那样得不到的..
    使用存储过程来做.------------------------------------
    --用途:增加一条记录 
    --项目名称:
    --说明:
    --时间:2006-9-20 11:07:15
    ------------------------------------
    CREATE PROCEDURE MC_CallCardMain_ADD
    @CallMainID int output,
    @CallCardName nvarchar(32) 
     AS 
    INSERT INTO 表名 ([CallCardName)
             VALUES(@CallCardName)
    set @CallMainID= @@identity
    GO
      

  5.   

    去掉
    comm.ExecuteNonQuery();
      

  6.   

    一个sqlCommand不能使用两次,,可以定义两个sqlCommand.
    如:
    comm1.CommandText = "INSERT INTO Dept (DeptName, UpID, StopID) VALUES ('" + deptinfo.DeptName + "', " + deptinfo.UpID + ", " + deptinfo.StopID + ")";comm2.CommandText = "SELECT @@IDENTITY From Dept";
      

  7.   

    执行的时候使用         
      SqlParameter[] parameters = {
    new SqlParameter("@CallMainID", SqlDbType.Int,4),
    new SqlParameter("@CallCardName", SqlDbType.NVarChar),
                };
                parameters[0].Direction = ParameterDirection.Output;
                parameters[1].Value = "名字";
     comm.CommandText = "MC_CallCardMain_ADD";
    comm.Parameters.AddRange(parameters );            BaseData.ExecuteNonQuery("MC_CallCardMain_ADD", parameters);
    parameters[0].Value即你要的结果
      

  8.   

    分开执行是可以的,主要是同一个connection就没问题,我一直都是这样做的,不过我只用
    SELECT @@IDENTITY,不知道有没有影响