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
我有一个C#Winforms应用程序,我正在尝试插入一本带有文本框的新书。然而,我碰到了一堵墙。我可以在
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。您应该从应用程序层传递此值。因此,您应该使用存储过程。