0

问题是无法获取所有值,只有第一条记录可用,即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;
4

5 回答 5

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 习惯用法。

于 2013-05-02T18:26:37.937 回答
9

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

解决方法是:

  1. 返回一个封装了这些不同值的对象。
  2. 使用参数
  3. 使用参考参数
  4. 返回一个元组
  5. 返回一个 IEnumreable 并通过yield一个一个地返回项目
于 2013-05-02T18:25:53.267 回答
0

.Net 中的方法不支持多个返回语句。如果你想返回多个值,你必须通过返回一个集合来实现。这是一个例子:

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

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

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

于 2013-05-02T18:27:47.183 回答
0

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

于 2013-05-02T18:26:33.297 回答
0

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

于 2013-05-02T18:26:38.367 回答