插入一个表,获取id并插入另一个表

时间:2016-02-27 14:59:08

标签: c# asp.net sql-server

我需要检查表格中是否存在string,例如Table1。如果是,请获取表中字符串的id(id是Identity列,它会自动增加其值)。如果没有将字符串作为新行添加到表中并获取id

然后将数据插入另一个表格,例如Table2,获取id中新数据的Table2并更新Table1

我的情况是:

用户可以上传带有标签的图片。当用户点击upload按钮时,首先检查tag中是否存在table Tags。获取tag id。需要AssociatedTags中的table Images列。

然后获取image id中的AssociatedImages和更新table Tags列。

或者如果我做错了,还有其他方法可以做到这一点,请指点我。

先谢谢。

以下是我将新行插入数据库所做的工作

SqlConnection SConn = new SqlConnection();
SConn .ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["my_Connection"].ConnectionString;
SConn .Open();
using (SqlCommand SComm = new SqlCommand())
{
    SComm .Connection = SConn ;
    SComm .CommandType = CommandType.Text;
    SComm .CommandText = "INSERT INTO Images (Title,Category,TagIds) VALUES (@val1, @val2, @val3)";
    SComm .Parameters.AddWithValue("@val1", title.Text);
    SComm .Parameters.AddWithValue("@val2", Category.Text);
    if (string.IsNullOrEmpty(Tags.Text))
        SComm .Parameters.AddWithValue("@val3", DBNull.Value);
    else
        SComm .Parameters.AddWithValue("@val3", Tags.Text);
}

3 个答案:

答案 0 :(得分:2)

   i think it is better to make procedure like this

 create procedure insertimage
  (@title mvarchar(50),
   @category nvarchar(50),
  @tagtxt  nvarchar(50)
 )
   as
 declare @tagid int
 if exists(select tagid from tags where tagtxt=@tagtxt)
begin
set @tagid=(select tagid from tags where tagtxt=@tagtxt)
 insert into image (title,category,tagid)values(@title,@category,@tagid)
 end
else
begin
insert into tags(tagtxt)values(@tagtxt)
 set @tagid=(SCOPE_IDENTITY())
 insert into image (title,category,tagid)values(@title,@category,@tagid)
end

    and in c#

 sqlcommand scomm=new sqlcommand("insertimages",sconn)
 scomm.CommandType = CommandType.StoredProcedure;

  scomm.Parameters.Add("@title", SqlDbType.NVarChar).Value = title.text;
        scomm.Parameters.Add("@category", SqlDbType.NVarChar).Value = category.Text;
    scomm.Parameters.Add("@tagtxt", SqlDbType.NVarChar).Value = tags.text;
 sconn.open();
 scomm.ExecuteNonQuery();
     con.close();

答案 1 :(得分:0)

将您的sql更改为:

INSERT INTO Images (Title,Category,TagIds) VALUES (@val1, @val2, @val3); Select Scope_Identity()

然后:

int ID = (int)SComm.ExecuteScalar();

答案 2 :(得分:0)

+1 to banksy(我没有足够的声誉来发表评论) - 在数据库中做数据库。

我建议将存储过程的主体放在事务中:

create procedure insertimage
  (@title mvarchar(50),
   @category nvarchar(50),
  @tagtxt  nvarchar(50)
 )
   as
BEGIN TRY
BEGIN TRANSACTION
 declare @tagid int
 ...
 ...
 insert into image (title,category,tagid)values(@title,@category,@tagid)
end
COMMIT TRANSACTION
END TRY

BEGIN CATCH
ROLLBACK TRANSACTION
-- Add any error processing
END CATCH

大写的行是新的。案件并不重要。

交易的原因是,如果出现任何问题,所有内容都会回滚(即撤消)。 image中没有一行,tags中没有一行(例如)。