2016-05-09 155 views
2

我已经创建控制台应用程序:存储过程

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.Objects; 

namespace ConsoleApplication3 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      NorthwindEntities nwe = new NorthwindEntities(); 

     var customerOrdersDetail = nwe.CustOrdersDetail(10248); 

     foreach (var ordersDetail in customerOrdersDetail) 
      { 
      Console.WriteLine(ordersDetail.ProductName); 
      Console.WriteLine(ordersDetail.UnitPrice); 
      Console.WriteLine(ordersDetail.Quantity); 
      Console.WriteLine(ordersDetail.ExtendedPrice); 
      Console.WriteLine(ordersDetail.Discount); 
      Console.ReadLine(); 
      } 
     } 
    } 
} 

它显示了所有关于产品的ID我inputed在nwe.CustOrdersDetail();的细节,但我有兴趣,我可以输入ID直接进入应用程序时,它开始?当我想显示有关其他产品的信息时,不要全面启动应用程序会更有用。

+1

你可以在一个循环中编写代码,直到遇到(或不是)只需要带有Console.ReadLine()的ID时,或者你可以使用你的'string [] args'来传入ID在开始(虽然这似乎是更难以“更改”的ID在第一 – Kritner

+0

呃...此外,这个问题标题/标签与存储过程有什么关系? :o – Kritner

+0

因为一切都被连接到被称作CustOrdersDetail存储过程。我在开始时没有说清楚,我的坏处。 –

回答

3

您需要隔离的功能,取一个订单明细项目,并把它弄成可以反复调用,因为这只是一个控制台应用程序,这样的事情应该工作证明:

private static void Main(string[] args) 
{ 
    FetchOrderDetail(); 
} 

private static void FetchOrderDetail() 
{ 
    string input = string.Empty; 

    while (input != "exit") 
    { 
     Console.WriteLine("Enter order detail ID: "); 
     input = Console.ReadLine(); 

     int orderId = 0; 
     if (Int32.TryParse(input, out orderId)) 
     { 
      var customerOrdersDetail = nwe.CustOrdersDetail(orderId); 

      foreach (var ordersDetail in customerOrdersDetail) 
      { 
       Console.WriteLine(ordersDetail.ProductName); 
       Console.WriteLine(ordersDetail.UnitPrice); 
       Console.WriteLine(ordersDetail.Quantity); 
       Console.WriteLine(ordersDetail.ExtendedPrice); 
       Console.WriteLine(ordersDetail.Discount); 
       Console.ReadLine(); 
      } 
     } 
    } 
} 
+0

这工作完美。 –

1

解析args数组,并通过它,就像这样:

var customerOrdersDetail = nwe.CustOrdersDetail(int.Parse(args[0])); 

这样,您就可以使用它从这样的命令行:

ConsoleApplication3 10248 
ConsoleApplication3 10249 
ConsoleApplication3 10250 
0

你可以在一个循环中编写,直到遇到(或不是)只用一个Console.ReadLine()的ID时,或者你可以使用你的字符串[] args在开始时传入一个ID(虽然这看起来这将是“改变”的ID更难在第一

public class Program 
{ 
    public static void Main(string[] args) 
    { 
     while (true) 
     { 
      Console.WriteLine("Enter an ID, q to quit"); 
      string line = Console.ReadLine(); 

      if (line == "q") 
       break; 

      int myId = int.Parse(line); // note this will throw if you enter a non int (and not q) 
      OutputInformation(myId); 

     } 

     Console.WriteLine("Done"); 
    } 

    public static void OutputInformation(int Id) 
    { 
      NorthwindEntities nwe = new NorthwindEntities(); 

      var customerOrdersDetail = nwe.CustOrdersDetail(myId); 

      foreach (var ordersDetail in customerOrdersDetail) 
      { 
       Console.WriteLine(ordersDetail.ProductName); 
       Console.WriteLine(ordersDetail.UnitPrice); 
       Console.WriteLine(ordersDetail.Quantity); 
       Console.WriteLine(ordersDetail.ExtendedPrice); 
       Console.WriteLine(ordersDetail.Discount); 
       Console.ReadLine(); 
      } 
    } 
} 
0

你为什么不只需输入您希望通过运行,并从args数组访问它们的ID的列表:

foreach (var input in args) 
{ 
    Console.WriteLine(int.Parse(input)); 
} 

调用它l ike this:ConsoleApplication3 10248 10249 10250