将所选值从一个表插入另一个表

时间:2014-02-17 15:37:52

标签: c# asp.net sql

我正在尝试从我的表中获取包含有关我的书籍信息的信息,并在按下“添加到购物车”时将其存储到名为Orders的数据库中。但我无法弄清楚如何做到这一点。我到处搜索并尝试了我能想到的一切,所以有一些我不知道的事情。能否请你帮我纠正这个陈述以给它带来决定性的效果?

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price)"+ 
                                 "SELECT ISBN, Title, Author, Price FROM BooksInfo"+
                                 "WHERE BooksInfo.ISBN=@Id", con);
cmd2.Parameters.AddWithValue("@Id", Id);
cmd2.ExecuteNonQuery();

5 个答案:

答案 0 :(得分:2)

看起来你看起来并不是很远,但是当你连接时你的字符串末尾需要空格

                         // note addition of space to end of each string fragment
SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price) "+ 
                                 "SELECT ISBN, Title, Author, Price FROM BooksInfo "+
                                 "WHERE BooksInfo.ISBN=@Id", con);

否则您的SQL语句将是:

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE BooksInfo.ISBN=@Id

由于列列表与SELECT关键字

之间没有空格,因此会出现语法错误

我看到的其他一些事情:

  • Orders表上是否没有OrderID?
  • 为什么需要Order表中的标题和作者?理想情况下,这些应该是BooksInfo
  • 的外键
  • 订购商品不应该在单独的表格中吗? (如果有人订购了两本书怎么办?)

答案 1 :(得分:1)

试试这个:

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price) "+ 
                                 "SELECT ISBN, Title, Author, Price "+
                                 "FROM BooksInfo "+
                                 "WHERE BooksInfo.ISBN=@Id", con);

答案 2 :(得分:0)

您当前在insert语句中没有@Id参数,因此ID参数是多余的。

此外,要插入值,您需要使用Insert语句的相应Values (@ISBN, @Title, @Author, @Price)语句。然后,您还需要以与您完成ID的方式类似的方式添加值的参数。

根据下面的评论,SQL将成为:

insert into DatabaseA..Orders (ISBN, Title, Author, Price) 
SELECT ISBN, Title, Author, Price from DatabaseB..BooksInfo
where BooksInfo.ISBN = @Id

如果你想从C#控制数据库,那么你可以将它们作为字符串的一部分添加,而不是硬编码。

答案 3 :(得分:0)

为什么不将此任务分为两个不同的任务  1.从一个数据库中选择值并将它们放入某个对象orderCart中;  2.使用orderCart的值插入或更新其他数据库中的值 首先 - 在这种情况下调试和理解代码更容易

答案 4 :(得分:0)

它是关于字符串连接的。

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price)"+ 
                                 "SELECT ISBN, Title, Author, Price FROM BooksInfo"+
                                 "WHERE BooksInfo.ISBN=@Id", con);

SqlCommand将生成

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE BooksInfo.ISBN=@Id

而不是

INSERT INTO Orders (ISBN, Title, Author, Price)
SELECT ISBN, Title, Author, Price FROM BooksInfo
WHERE BooksInfo.ISBN=@Id

您可以在价格后添加空格或换行符)和BooksInfo