2013-12-12 88 views
0

我會先打招呼!在過去的幾個月裏,這個論壇對我很有幫助,但是現在才加入並問我的第一個問題。 我正在使用SQL Server 2008 R2中的Northwind數據庫來構建一個vb.net應用程序。我一直在努力弄清楚如何訂購/發票表格,這讓我頭疼了一個星期。我可以使用單獨的存儲過程(GetCustInfo,GetOrderInfo,GetProductInfo或類似的東西)獲取我需要顯示的信息,但我無法弄清楚如何在窗體上顯示它們。 當我在一個sp中選擇需要的所有信息時(如在db中構建的Invoice視圖中),我得到2155行,這是公司歷史中已訂購的項目數。 我想要做的是顯示此信息,但通過OrderID導航(這會給我830行,每行都有與OrderID相關的一定數量的產品)。所以我想我需要不同的存儲過程相關,可以以某種方式相關。 我真的很感激任何幫助,可以在這個。存儲過程之間的關係?

非常感謝提前。

p.s.我有Northwind示例應用程序的屏幕截圖,該應用程序在Access中發佈/附帶,這正是我試圖在SQL Server中重新創建的內容。不幸的是,沒有代碼! MM

+1

您是試圖爲「長途」學習東西還是隻是短時間地探索? – granadaCoder

+0

「長途旅行」,正如你所說的那樣!你爲什麼要問? – MarceeMarc

回答

0

是的,你可以通過很多方式實現它,SP是一個。只需創建一個SP來選擇將OrderId作爲輸入參數的相關產品。

+0

是否有另一種更有效率或「最佳實踐」的方式,而不是您建議的方式? – MarceeMarc

0

一些選項(與做作的例子):

您可以ALTER現有的存儲過程,以得到你想要的東西(不推薦,如果你想使用其他查詢現有的程序)。

ALTER PROCEDURE usp_ExistingProcedure 
AS 
BEGIN 

SELECT t1.Value 
, t2.Value 
-- Supose that this was the addition we made to an existing stored procedure 
, t2.ValueTwo 
FROM TableOne t1 
INNER JOIN TableTwo t2 ON t1.ID = t2.ID 

END 

您可以CREATE爲您的查詢新的存儲過程;在上面的例子中,它將是一個帶有新名字的創建過程。

您或許可以創建一個VIEW以獲得您所需的內容 - 這會有所不同。

CREATE VIEW uv_ApplicationView 
AS 

SELECT t1.Value 
    , t2.Value 
    , t2.ValueTwo 
    FROM TableOne t1 
    INNER JOIN TableTwo t2 ON t1.ID = t2.ID 

您可以從VB應用程序直接拉查詢,但如果你想重新使用它別的東西,我不會推薦這種方法。

// A re-usable approach calling a stored procedure 
SqlCommand myQuery = new SqlCommand("EXECUTE usp_myQuery", sqlConn); 

// A query directly in the C# code: 
string msQuery = "SELECT t1.Value, t2.Value, t2.ValueTwo FROM TableOne t1 INNER JOIN TableTwo t2 ON t1.ID = t2.ID" 
// Later ... 
SqlCommand myQuery = new SqlCommand(msQuery, sqlConn); 
+0

非常感謝。我認爲改變現有的sps是相同的,它們對於創建特定的表單和報告非常有用。我也嘗試創建自定義sps,但無法通過一個查詢生成我想要的結果。我不確定'你直接拉查詢'的意思。你的意思是使用sqlcommandtext來編寫內聯SQL語句嗎?謝謝你的幫助! – MarceeMarc

+0

@MarceeMarc我見過'C#'和'VB'中的一些開發人員將在他們的代碼中列出查詢,我不是那麼喜歡的,特別是如果它是一組您可能在別處調用的數據。它可以完成,但它不是我的首選方法。 – Question3CPO

+0

這也是我在很多教程中看到的。我將sp結果集作爲數據集導入並使用它(如果這樣做合理,我仍然需要掌握術語和邏輯!)。感謝您的幫助和迴應。 – MarceeMarc