实现功能是:在发帖的同时上传图像,并把发的当前帖子的ID(表Topci,主键是ID,自增字段)同时插入到表Img的Topic中,怎么样才能获取Topic表的主键ID?
我现在的插入语句是: "insert into Img(Image_Wpath,Imge_User,Topic_ID,UpLoad_Time) values(" + "'" + wpath + "'" + "," + "'" + Session["UserName"].ToString() + "'" + "," + "'" + ImgID.ToString() + "'" + "," + "'" + DateTime.Now.ToString() + "'" + ");";
应该怎样修改?用的是VS2008,SQL2005。
有人说用select identity()直接写在insert语句后,请问我应该怎么写?能不能帮我修改一下?

解决方案 »

  1.   

    应该是在插入贴子表的后面加入select @@identity
    insert into Topic ... value(...);select @@identity
    这两句要一次传到数据库执行。
    可以在插入后取到最后的那个标识列的值。
      

  2.   


    insert into Img(Image_Wpath,Imge_User,Topic_ID,UpLoad_Time) values(" + "'" + wpath + "'" + "," + "'" + Session["UserName"].ToString() + "'" + "," + "'" + CONVERT(INT,IDENT_CURRENT('Topci')) + "'" + "," + "'" + DateTime.Now.ToString() + "'" + ")
      

  3.   


    CONVERT(INT,IDENT_CURRENT('Topci'))
    主要是上面的这个函数
      

  4.   

    可以先把Topic表的主键ID取出来。
    然后做为参数插入进去至于自增字段 数据库里设置自动增长 插入的时候不需要管他
    论坛签名======================================================================

    当您的问题得到解答后请及时结贴.

    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html
    http://topic.csdn.net/u/20100428/09/BC9E0908-F250-42A6-8765-B50A82FE186A.html
    http://topic.csdn.net/u/20100626/09/f35a4763-4b59-49c3-8061-d48fdbc29561.html如何给分和结贴?
    http://community.csdn.net/Help/HelpCenter.htm#结帖如何给自己的回帖中也加上签名?
    http://blog.csdn.net/q107770540/archive/2011/03/15/6250007.aspx
      

  5.   

    如果是在存储过程中写的插入逻辑的话,那在向Topic表插入一条记录后,直接用@@identity就可以获取ID
      

  6.   

    我是要把那个主键取出来,请问怎么取?要把那个主键的ID插入IMG图片数据库里。
      

  7.   

    IDENT_CURRENT()的作用域好像太大。插入topic表后,执行插入Img表前,又有一个对topic的插入操作,这时的值有问题。
      

  8.   

    我是先把帖子数据存进Topic表,然后才能把它的主键ID存进Img表吧?按照上面说的试过,都不行。
      

  9.   


    private bool StoreUserInfo(string title, string contents)//先把帖子写进去
    if (!(String.IsNullOrEmpty(Topic_Title) && String.IsNullOrEmpty(Topic_Content)))
                {
                    StoreUserInfo(Topic_Title, Topic_Content);//这里加了保存图片的代码
    string UpLoad_img = "insert into Img(Image_Wpath,Imge_User,UpLoad_Time) values(" + "'" + wpath + "'" + "," + "'" + Session["UserName"].ToString() + "'" + "," + "'" + DateTime.Now.ToString() + "'" + ");";
                    SqlCommand cmdImg = new SqlCommand(UpLoad_img, con_img);
                    con_img.Open();
                    if (type == "jpg" || type == "gif" || type == "bmp" || type == "png")
                    {
                        FileUpload_Img.SaveAs(path);        //服务器保存路径
                        cmdImg.ExecuteNonQuery();
                    }
    }
      

  10.   

    上面的是我把插入Topic_ID这一个去掉了
    那个原来的sql语句是我之前发的那个:
    "insert into Img(Image_Wpath,Imge_User,Topic_ID,UpLoad_Time) values(" + "'" + wpath + "'" + "," + "'" + Session["UserName"].ToString() + "'" + "," + "'" + ImgID.ToString() + "'" + "," + "'" + DateTime.Now.ToString() + "'" + ");";
      

  11.   

    你这样写,先插入Topic
    //插入代码你自己补全
    String sql="insert into topic values(); select @@identity;";//用SqlCommand的EexecuteScalar()执行
    int pid=(int)cmd.ExecuteScalar(sql);
    //插入图片,pid中就是你要的主键了
    String sql2="insert ...  values (... "+pid+",...)";
      

  12.   

    还是不行,报错,写着:
    错误 1 “ExecuteScalar”方法没有采用“1”个参数的重载
      

  13.   

    不好意思写错了,
    sql是在建立Command时传入。
    ExecuteScalar();就不要传了。
      

  14.   

    他说指定转换无效,当一个数字执行强制转换时,转化的值必须是一个小于无限大的数字。
    然后我加了一句:Convert.ToInt32(Tcmd.ExecuteScalar());也不行。为什么?
      

  15.   

    如果要用@@identity获取你的id
    那么你的id要设置为标识列才行
      

  16.   

    Topic的ID列是标识列。回子夜:还没弄出来。
      

  17.   

            string.Format(@"insert into Img(Image_Wpath,Imge_User,Topic_ID,UpLoad_Time)
                            values('{0}','{1}','{2}',getdate());
                            insert into 表名(列名1,列名2,列名3)
                            values(@@identity,@@identity,@@identity);",
                          wpath,
                          Session["UserName"].ToString(),
                          ImgID.ToString());