0

我在递归创建产品代码时遇到问题。我想做的是:

我输入代码 1000

- 如果代码存在于数据库 regenerateCode(字符串代码)

-else 插入数据库

代码:

(...) if(codeExist) CodeTB.Text = regenerateCode(string toParse); //toParse = 1000

       string regenerateCode(string toParse)
                {
                    string helper = "";

                    int parseCode = int.Parse(toParse);
                    helper = new string('0', 4 - parseCode.ToString().Length);
                    helper += parseCode + 1;


                    using (SqlConnection conn = new SqlConnection(cString.c_String))
                    {
                        conn.Open();
                        using (SqlCommand cmd = new SqlCommand("SELECT Product.productID FROM Product " +
                          "WHERE Product.PLU = '" + helper + "' ", conn))
                        {
                            using (SqlDataReader rdr = cmd.ExecuteReader())
                            {
                                if (rdr.HasRows)
                                {
    // if code still exist in database, regenerate it
                                    regenerateCode(helper);
                                }
                                else
                                {
//else return code
                                    return helper;
                                }
                            }
                        }
                    }
                    return helper;
                }

实际上它适用于示例:1000(存在)1001(存在)1002(不存在,插入),但是当代码= 1002时,它与else {return helper;}一致并且不知道为什么要再次重新生成代码( ) 方法..

有任何想法吗?

4

1 回答 1

1

发生这种情况是因为您对返回值不做任何事情。您将帮助器传递给递归,但不要将返回值放在任何地方。您的方法应如下所示:

string regenerateCode(string toParse)
{
  string helper = "";

  int parseCode = int.Parse(toParse);
  helper = new string('0', 4 - parseCode.ToString().Length);
  helper += parseCode + 1;

  using (SqlConnection conn = new SqlConnection(cString.c_String))
  {
    conn.Open();
    using (SqlCommand cmd = new SqlCommand("SELECT Product.productID FROM Product " +
      "WHERE Product.PLU = '" + helper + "' ", conn))
    {
      using (SqlDataReader rdr = cmd.ExecuteReader())
      {
        // Return the next code that doesn't exist
        return rdr.HasRows ? regenerateCode(helper) : helper;
      }
    }
  }
}

另外,请记住,虽然字符串是引用类型,但它们是不可变的。这意味着作为参数传递的字符串不会像普通数组那样改变。请参阅:如何在 .NET 中传递字符串?

于 2013-09-02T11:23:57.347 回答