我正在尝试从我的表中获取包含有关我的书籍信息的信息,并在按下“添加到购物车”时将其存储到名为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();
答案 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
关键字
我看到的其他一些事情:
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