2014-02-17 188 views
1

我試圖從我的表中獲取包含有關我的書籍的信息的信息,並在按「添加到購物車」時將其存儲到名爲Orders的數據庫中。但是我很難弄清楚如何做到這一點。我搜遍了所有的東西,並嘗試了所有我能想到的東西,所以有些東西我不知道。你能幫我糾正一下這個陳述嗎?將選定的值從一個表插入另一個表

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

hey iQue表訂單和BooksInfo駐留在同一個數據庫中。對?我在問,因爲當我讀到你的問題時,它似乎有點含糊。 – Christos

+0

啊,對不起。是的,他們在同一個數據庫:) –

+0

沒問題....! – Christos

回答

1

試試這個:

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price) "+ 
           "SELECT ISBN, Title, Author, Price "+ 
           "FROM BooksInfo "+ 
           "WHERE [email protected]", con); 
+0

這給了我'cmd2.ExecuteNonQuery();'錯誤,'類型'System.Data.SqlClient.SqlException'的異常發生在System.Data.dll,但未在用戶代碼中處理 附加信息:關鍵字'SELECT'附近的語法錯誤。 –

+0

對不起iQue。 「VALUES」是不需要的。我刪除它。請現在試試這個。 – Christos

+0

哈哈,不需要爲嘗試幫助而道歉。似乎我在我的表中犯了一些錯誤,因爲這給我錯誤「無法將重複鍵插入到訂單」。將嘗試找出是什麼原因造成的,看看這是否有效:) –

0

您目前在插入語句中沒有@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#數據庫那麼您可以在添加這些作爲字符串的一部分,而不是硬編碼他們。

+0

但是,這將是使用變量添加值,即時尋找一種方式來插入從一個數據庫到另一個沒有將值保存到變量首先,必須有一種方法,不是? –

+0

在這種情況下,如果你的數據庫被命名爲DatabaseA和DatabaseB,那麼你可以使用這樣的東西: 插入DatabaseA..Orders(ISBN,Title,Author,Price) SELECT ISBN,Title,Author,Price from DatabaseB .. BookInfo –

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 [email protected]", con); 

否則你的SQL語句應該是:

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE [email protected] 

這將是一個語法錯誤,因爲沒有列列表和SELECT關鍵字之間的空白空間

我看到的其他一些東西:

  • Orders表上沒有OrderID嗎?
  • 爲什麼您需要Order表中的標題和作者?理想情況下,這些應該是外鍵BooksInfo
  • 不應該訂單項目在一個單獨的表? (如果有人訂購什麼這兩本書?)
+0

訂單項目是在一個單獨的表?這就是爲什麼我試圖插入infro關於訂購書到這張表 –

+0

@iQue通常你有一個Order表,它包含訂單本身(日期放置,狀態,地址等)的數據和一個_separate_表包含每個訂單中的實際項目。 –

+0

啊,我明白你的意思了。這確實更有意義,但目前我只是遵循assignmemt的命令:) –

0

爲什麼不在這個任務在兩個不同的任務 1.選擇值從一個數據庫分開,放到某個對象orderCart; 2.使用orderCart 的值插入或更新其他數據庫中的值首先 - 在這種情況下更容易調試和理解代碼

0

它是關於字符串連接的。

SqlCommand cmd2 = new SqlCommand("INSERT INTO Orders (ISBN, Title, Author, Price)"+ 
           "SELECT ISBN, Title, Author, Price FROM BooksInfo"+ 
           "WHERE [email protected]", con); 

的SqlCommand會產生

INSERT INTO Orders (ISBN, Title, Author, Price)SELECT ISBN, Title, Author, Price FROM BooksInfoWHERE [email protected] 

代替

INSERT INTO Orders (ISBN, Title, Author, Price) 
SELECT ISBN, Title, Author, Price FROM BooksInfo 
WHERE [email protected] 

您可以添加後的價格空間或斷行)和BooksInfo

相關問題