【问题标题】:Insert into two tables in one statement SQL Server在一个语句中插入两个表 SQL Server
【发布时间】:2015-03-01 23:31:03
【问题描述】:

我不确定如何解决这个问题。

我有三张桌子,bookcollectionbooksusers

bookcollection : bookc_id, bookc_bookid, bookc_bookuser
books : bookid, title, author, year
users : userid, username, password
  • bookidbookc_bookid 的外键
  • useridbookc_bookuser 的外键

我有一个 C# Winforms 应用程序,我正在尝试插入一本带有文本框的新书。然而,我碰壁了。我可以在books 表中插入一本新书。但是,我还需要能够将useridbookid 插入到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();
    }

在主窗体上,我有一个字符串,它使用 public string Username; 之类的用户名传递

谁能帮我解决这个问题?我是否需要创建一个存储过程,如果需要,我该怎么做?提前致谢。

【问题讨论】:

  • 当您创建关于Sql Server 的参数时,为什么不使用有意义的参数名称..?这里还有一个 Sql 教程的链接Sql Basics Tutorial

标签: c# sql sql-server winforms


【解决方案1】:

尝试在书籍上使用插入触发器。使用触发器,当您在书籍上插入数据时,它会自动将数据添加到具有给定参数的其他表中。

【讨论】:

  • 请问您能给我一个例子或开始吗?
  • 您正在将此代码用于用户名传递用户名字符串值的一个用户ID,对吗?
  • 到目前为止,我刚刚将书籍添加到通用书籍表中的这段代码,但我需要将用户 ID 和 booksid 插入到书籍集合中。在我的主要内容中,我使用此INNER JOIN users r ON c.bookC_userid = r.userid WHERE username LIKE '" + Username 获得了登录用户名的用户ID,因此我从字符串Username yes 中获取了用户ID。
  • 我猜第二个查询不会是 INSERT,因为你不能在 INSERT 子句中包含 WHERE,所以它可能是更新。使用 userid 和 bookid 更新 bookcollection
  • @1234566543 你是什么意思你不能在插入中拥有WHERE..?? W3cSchools Sql Tutorial & Examples
【解决方案2】:

那么存储过程将是更好的将参数传递给数据层的解决方案。试试这个:

create proc sp_AddToBookCollection
(
@bookid int,
@userid int
)
as
begin
insert into bookcollection(bookc_bookid, bookc_bookuser)
values (@bookid,@userid)
end

在使用此过程时,您应该将用户 ID 值传递给查询。

【讨论】:

  • 嘿,谢谢你,但我实际上认为在这种情况下触发器会更充分,所以它会更新 bookcollection,而不是这样我可以通过某种方式传递用户名字符串?这可能吗?请你帮忙。
  • @1234566543 如果您认为触发器可能最适合您的需求.. 然后在谷歌搜索如何创建触发器.. 请多加一点努力..跨度>
  • 触发器在数据层的表上工作,在您的情况下,您希望自动将数据添加到 bookcollection 表,该表采用 bookid 和 userid 参数。当您将数据添加到书籍表时,数据层会从插入的数据中获取 bookid,但缺少 userid。你应该从应用层传递这个值。因此,您应该使用存储过程。
猜你喜欢
  • 1970-01-01
  • 2021-08-11
  • 2011-01-03
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多