从C#中的方法返回多个值

时间:2013-05-02 18:24:07

标签: c#

问题是无法获得所有值,只有第一条记录可用,即PMDES1_01未捕获其他返回值,请帮助使用此代码

public class DataxAero
{
    //Create new method to get data from xAero database
    public static string GetData(string ORDNUM_10)
    {
        string PMDES1_01 = "";
        string DESCRPTN_104 = "";
        string PRTNUM_10 = "";
        string ORDREF_10 = "";
        string TNXDTE_01 = "";
        //Create connection
        SqlConnection con = new SqlConnection(@"Data Source=xxx;Initial Catalog=xxx;Integrated Security=true;");

        //SQL Command
        SqlCommand cmd = new SqlCommand("SELECT  ...............", con); 

        //Open connection
        con.Open();
        //to read from SQL Server
        SqlDataReader dr = cmd.ExecuteReader();
        while (dr.Read())
        {
            PMDES1_01 = dr["PMDES1_01"].ToString();
            PRTNUM_10 = dr["PRTNUM_10"].ToString();
            DESCRPTN_104 = dr["DESCRPTN_104"].ToString();                
            ORDREF_10 = dr["ORDREF_10"].ToString();
            TNXDTE_01 = dr["TNXDTE_01"].ToString();

        }

        //close connections
        dr.Close();
        con.Close();

       //get the values

        return PMDES1_01;
        return PRTNUM_10; (get error here Unreachable code detected)
        return DESCRPTN_104;             
        return ORDREF_10;
        return TNXDTE_01;

5 个答案:

答案 0 :(得分:11)

看起来这是在尝试返回相关的值 - 数字,描述,订单参考等。

您应该创建一个类来封装所有这些值,将方法的返回类型更改为该类,然后最后您的方法根据从数据库中检索的值创建该类的实例。

public static Order GetOrder(string orderId)
{
    // Use a "using" statement for each resource (database connection etc),
    // so that the resources are released even if there's an exception
    using (...)
    {
        // Do the query here...

        // Note "if" rather than "while" - we're only going to return
        // a single result anyway
        if (dr.Read())
        {
            string manufacturer = (string) dr["PMDES1_01"];
            int partNumber = (int) dr["PRTNUM_10"];
            string description = (string) dr["DESCRPTN_104"];
            int orderReference = (int) dr["ORDREF_10"];
            string text = (string) dr["TNXDTE_01"];
            return new Order(manufacturer, partNumber, description,
                             orderReference, text);
        }
        // No results!
        return null;
    }
}

我已经猜到了真正的数据类型,但我怀疑它们实际上是所有字符串。另请注意变量名称,更改为更易读并符合.NET习语。

答案 1 :(得分:9)

在C#中,您只能返回一个值。

这方面的方法是:

  1. 返回一个封装了这些不同值的对象。
  2. 使用out参数
  3. 使用ref参数
  4. 返回tuple
  5. 返回IEnumreable并通过yield
  6. 逐个返回项目

答案 2 :(得分:0)

要专门回答您的问题,这样做的方法是将它们作为out参数传递。但是,我同意Chris Sinclair的观点,如果它们都是相关的,你应该创建一个对象,在一个对象中包含所有这些值。

答案 3 :(得分:0)

您可以使用字符串数组。方法只有一次返回。

答案 4 :(得分:0)

<。> .Net中的方法不支持多个return语句。如果您希望返回多个值,则必须通过返回集合来执行此操作。这是一个例子:

public static List<string> GetData(string ORDNUM_10)
{
    //snip...

    return new List<string> { PMDES1_01, PRTNUM_10, DESCRPTN_104, ORDREF_10, TNXDTE_01 };
}

然后,您的调用代码可以从返回的列表中提取值。