控制台应用程序中的存储过程

时间:2016-05-09 14:59:13

标签: c# stored-procedures console-application

我创建了控制台应用程序:

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();
            }
        }
    }
}

它显示了我在nwe.CustOrdersDetail();中输入ID的产品的所有详细信息,但我感兴趣的是,我可以在应用程序启动时直接输入ID吗?当我想展示关于其他产品的信息时,不要全部启动应用程序会更有用。

4 个答案:

答案 0 :(得分: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();
            }
        }
    }
}

答案 1 :(得分:1)

解析args数组并将其传递,如下所示:

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

这样你可以在命令行中使用它,如下所示:

ConsoleApplication3 10248
ConsoleApplication3 10249
ConsoleApplication3 10250

答案 2 :(得分: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();
            }
    }
}

答案 3 :(得分:0)

为什么不直接输入要运行的ID列表并从args数组中访问它们:

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

这样称呼:ConsoleApplication3 10248 10249 10250