C# 在SQL Server的一条语句中插入到两个表中
我不知道如何解决这个问题 我有三个表,C# 在SQL Server的一条语句中插入到两个表中,c#,sql,sql-server,winforms,C#,Sql,Sql Server,Winforms,我不知道如何解决这个问题 我有三个表,bookcollection,books和users bookcollection : bookc_id, bookc_bookid, bookc_bookuser books : bookid, title, author, year users : userid, username, password bookid是bookc\u bookid userid是bookc\u bookuser 我有一个C#Winforms应用程序,我正在尝试插入一本
bookcollection
,books
和users
bookcollection : bookc_id, bookc_bookid, bookc_bookuser
books : bookid, title, author, year
users : userid, username, password
是bookid
bookc\u bookid
是userid
bookc\u bookuser
books
表中插入一本新书。但是,我还需要能够将userid
和bookid
插入bookcollection
表中,以便将其放入用户的图书集中
这就是我所拥有的
private void add()
{
using (SqlConnection connection = new SqlConnection(constr))
{
SqlCommand cmd = new SqlCommand("INSERT INTO books (title, author, year) VALUES (@t, @a, @y)");
cmd.CommandType = CommandType.Text;
cmd.Connection = connection;
cmd.Parameters.AddWithValue("@t", title.Text);
cmd.Parameters.AddWithValue("@a", author.Text);
cmd.Parameters.AddWithValue("@y", year.Text);
connection.Open();
cmd.ExecuteNonQuery();
}
在主窗体上,我有一个字符串,它与用户名一起传递,比如publicstringusername代码>
有人能帮我解决这个问题吗?我是否需要创建存储过程,如果需要,我将如何创建?提前谢谢 尝试在书本上使用插入触发器。使用触发器,当您在书本上插入数据时,它会自动将数据添加到具有给定参数的其他表中。那么存储过程将是更好的解决方案,可以将参数传递到数据层。试试这个:
create proc sp_AddToBookCollection
(
@bookid int,
@userid int
)
as
begin
insert into bookcollection(bookc_bookid, bookc_bookuser)
values (@bookid,@userid)
end
使用此过程时,您应该将userid值传递给查询。当您创建有关Sql Server的参数时,
为什么不使用有意义的参数名。。?这里还有一个Sql教程的链接,你能给我一个例子或一个开始吗?你用这个代码作为一个用户名,用户名传递用户名字符串值,对吗?到目前为止,我刚刚把这些书添加到general books表中,但我需要它将userid和booksid插入bookcollection。在我的main中,我获得了登录用户名的userid,其中,username LIKE'“+Username
因此我从字符串Username
yes中获取userid。不过,我想第二个查询不会是INSERT,因为INSERT子句中不能包含WHERE,因此可能是一个更新。使用userid和bookid@1234566543插入时不能有WHERE
是什么意思。。??嘿,谢谢你这么说,不过我实际上认为触发器在这种情况下会更充分,所以它会更新bookcollection,而不是以某种方式我可以在其中传递用户名字符串?这可能吗?如果您觉得触发器最适合您的需要,请您帮忙。@1234566543。。然后在谷歌上搜索如何创建触发器。。请您多做一点工作..触发器在数据层的表上工作,在您的情况下,您希望自动将数据添加到bookcollection表,该表采用bookid和userid参数。将数据添加到books表时,数据层从插入的数据中获取bookid,但缺少userid。您应该从应用程序层传递此值。因此,您应该使用存储过程。