有一News表,id为主键,自动增长,新增记录后想获取新增记录的id,无法获取,代码如下        SqlConnection Conn = new SqlConnection(strconn) ;
        Conn.Open();
        string sql = "insert into News(Title,NewsFrom,NewsContents,UpdateTime) values(@Title,@NewsFrom,@NewsContents,@UpdateTime)";
        SqlCommand cmd = new SqlCommand(sql,Conn);
        cmd.Parameters.Add(new SqlParameter("@Title",SqlDbType.NVarChar,255));
        cmd.Parameters.Add(new SqlParameter("@NewsFrom",SqlDbType.NVarChar,50));
        cmd.Parameters.Add(new SqlParameter("@NewsContents",SqlDbType.NText));
        cmd.Parameters.Add(new SqlParameter("@UpdateTime",SqlDbType.DateTime,8));
        cmd.Parameters["@Title"].Value=StrTitle;
        cmd.Parameters["@NewsFrom"].Value=StrNewsFrom;
        cmd.Parameters["@NewsContents"].Value=StrContents;
        cmd.Parameters["@UpdateTime"].Value=DateTime.Now;
        cmd.ExecuteNonQuery();
        //获取新增记录ID
sql="select SCOPE_IDENTITY() as ID from News";
SqlCommand cmdsel = new SqlCommand(sql,Conn);
SqlDataReader NewsDr = cmdsel.ExecuteReader();
if(NewsDr.Read())
{
Response.Redirect("News_Detail.aspx?ID="+NewsDr["ID"].ToString());
}
        Conn.Close();

解决方案 »

  1.   

    直接SELECT ID from News
      

  2.   

    SELECT MAX(ID) from News
      

  3.   

    sql数据库直接在insert 最后写
    SELECT @@identity
    就行了,不用另查
      

  4.   

    你这样写不好,如果数据量很大的话很容易出错,还是把插入和获取ID写到一个SP里面运行吧!
      

  5.   

    这样肯定是不行的。因为你分两次访问了数据库。也就是两次会话。而SCOPE_IDENTITY() 返回在当前会话中的任何表内所生成的最后一个标识值。你第二次访问数据库的时候没有生成任何值。所以你要在第一次访问数据库的时候得到此值。
      

  6.   

     SqlConnection Conn = new SqlConnection(strconn) ;
            Conn.Open();
            string sql = "insert into News(Title,NewsFrom,NewsContents,UpdateTime) values(@Title,@NewsFrom,@NewsContents,@UpdateTime);SELECT @Identity=SCOPE_IDENTITY()";
            SqlCommand cmd = new SqlCommand(sql,Conn);
            cmd.Parameters.Add(new SqlParameter("@Title",SqlDbType.NVarChar,255));
            cmd.Parameters.Add(new SqlParameter("@NewsFrom",SqlDbType.NVarChar,50));
            cmd.Parameters.Add(new SqlParameter("@NewsContents",SqlDbType.NText));
            cmd.Parameters.Add(new SqlParameter("@UpdateTime",SqlDbType.DateTime,8));
            SqlParameter identity=new SqlParameter("@Identity",SqlDbType.Int);
            identity.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(identity);
            cmd.Parameters["@Title"].Value=StrTitle;
            cmd.Parameters["@NewsFrom"].Value=StrNewsFrom;
            cmd.Parameters["@NewsContents"].Value=StrContents;
            cmd.Parameters["@UpdateTime"].Value=DateTime.Now;
            int iden=int.Parse(cmd.ExecuteReader().toString());
      

  7.   

    @@IDENTITY,返回最近一次插入的IDENTITY列的数值,返回值是numeric
      

  8.   

     SELECT max(ID) from News会出现脏读的问题SqlConnection Conn = new SqlConnection(strconn) ;
            Conn.Open();
            string sql = "insert into News(Title,NewsFrom,NewsContents,UpdateTime) values(@Title,@NewsFrom,@NewsContents,@UpdateTime) SELECT @@Identity";
            SqlCommand cmd = new SqlCommand(sql,Conn);
            cmd.Parameters.Add(new SqlParameter("@Title",SqlDbType.NVarChar,255));
            cmd.Parameters.Add(new SqlParameter("@NewsFrom",SqlDbType.NVarChar,50));
            cmd.Parameters.Add(new SqlParameter("@NewsContents",SqlDbType.NText));
            cmd.Parameters.Add(new SqlParameter("@UpdateTime",SqlDbType.DateTime,8));
            SqlParameter identity=new SqlParameter("@Identity",SqlDbType.Int);
            cmd.Parameters["@Title"].Value=StrTitle;
            cmd.Parameters["@NewsFrom"].Value=StrNewsFrom;
            cmd.Parameters["@NewsContents"].Value=StrContents;
            cmd.Parameters["@UpdateTime"].Value=DateTime.Now;
            int Id=Convert.ToInt32(cmd.ExecuteScalar());试试
      

  9.   

    select max(id) as ID from News
    或把添加放在存储过程,在过程里
    select max(id) from news 返回数据
      

  10.   


    SELECT MAX(ID) from News 这样多用户同时并发操作怎么办。不推荐这样做。
      

  11.   


    declare @table table (id  int identity(1,1),mcontent nvarchar(200))insert into @table (mcontent)
    select 'tt' union all
    select 'yy'
    select * from @tableselect @@identity 'newid'insert into @table (mcontent)
    select 'mm'
    select @@identity 'newid' 
    lz运行一下就看明白了
      

  12.   

    比如:
    insert into testid (data) values ('aaa') select @@identity
    就会返回当前插入行的自动编号的ID。
      

  13.   

    在插入的sql语句中写就可以了string sql = "insert into News(Title,NewsFrom,NewsContents,UpdateTime) values(@Title,@NewsFrom,@NewsContents,@UpdateTime);SELECT SCOPE_IDENTITY() as id "; 执行返回单个值的操作int Id=Convert.ToInt32(cmd.ExecuteScalar()); 
      

  14.   

     SqlConnection Conn = new SqlConnection(strconn) ;
            Conn.Open();
            string sql = "insert into News(Title,NewsFrom,NewsContents,UpdateTime) values(@Title,@NewsFrom,@NewsContents,@UpdateTime);SELECT @Identity=SCOPE_IDENTITY()";
            SqlCommand cmd = new SqlCommand(sql,Conn);
            cmd.Parameters.Add(new SqlParameter("@Title",SqlDbType.NVarChar,255));
            cmd.Parameters.Add(new SqlParameter("@NewsFrom",SqlDbType.NVarChar,50));
            cmd.Parameters.Add(new SqlParameter("@NewsContents",SqlDbType.NText));
            cmd.Parameters.Add(new SqlParameter("@UpdateTime",SqlDbType.DateTime,8));
            SqlParameter identity=new SqlParameter("@Identity",SqlDbType.Int);
            identity.Direction = ParameterDirection.Output;
            cmd.Parameters.Add(identity);
            cmd.Parameters["@Title"].Value=StrTitle;
            cmd.Parameters["@NewsFrom"].Value=StrNewsFrom;
            cmd.Parameters["@NewsContents"].Value=StrContents;
            cmd.Parameters["@UpdateTime"].Value=DateTime.Now;
            int iden=int.Parse(cmd.ExecuteReader().toString());
      

  15.   

    在存储过程里先Insert ,然后SELECT @@identity  取这个返回值就可以了
      

  16.   


        sql="select Ident_Current('News') ";
        SqlCommand cmdsel = new SqlCommand(sql,Conn);
        SqlDataReader NewsDr = cmdsel.ExecuteReader();