У меня возникла проблема с созданием кода продукта в рекурсии. То, что я хочу сделать, это:Сгенерировать код с рекурсией
вхожу код 1000
-Если код существует в regenerateCode базы данных (строка кода)
-else вставки в базу данных
Код:
(...) if (codeExist) CodeTB.Text = регенерировать код (строка 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;} и не знаю, зачем снова переходить на метод recateCode().
Любые идеи?
Вы сказали, что когда код = 1002, он переходит в предложение else ... он * должен * делать ... вы также сказали «1002 (не существует)» ... поэтому 'rdr.HasRows' = ложный. Что именно * * ваша проблема? – Sheridan
У меня в базе данных существующие коды: 1001, 1002, 1003. Итак, следующий должен быть 1004. Когда я ставил «1001» в текстовое поле кода, он идет именно там: restoreateCode (helper); // 1001, restoreateCode (helper); // 1002, restoreateCode (хелпер); // 1003, restoreateCode (helper); // 1004 - в этот момент строковый код в порядке, и он должен возвращать код 1004, но он этого не делает, просто соединяется с: return helper; // последняя строка и снова переходит в recateCode (helper); // 1001 restoreateCode (helper); // 1002 – user13657
Вы просто пытаетесь найти самый высокий номер «кода» в базе данных или есть «пробелы» в последовательности номеров кода, которые вы пытаетесь найти? – Sheridan