2013-12-12 51 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