我需要检查表格中是否存在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);
}
答案 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
中没有一行(例如)。