재귀에서 제품 코드를 만드는 데 문제가 있습니다. 는 내가하고 싶은 것입니다 :재귀를 사용하여 코드 생성
내가 코드 1000
-if 코드 데이터베이스 regenerateCode에 존재 (문자열 코드) 데이터베이스에
-else 인서트를 입력
코드 :
(...) if (codeExist) CodeTB.Text = regenerateCode (string toParse); // toParse = 실제로 예로 잘 작동
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 1000 (존재) 1001 (존재) 1,002 (존재하지 인서트)이지만, 코드 = 1002, 그것과 일치 들어가는 else {return helper;} 그리고 왜 다시 regenerateCode() 메소드를 사용하는지 알 수 없습니다 ..
아이디어가 있으십니까?
당신은 코드가 1002 일 때 else 절에 들어가야한다고 말했습니다 ... 당신은 또한 '1002 (존재하지 않음)'라고 했으므로 ... 'rdr.HasRows' = 그릇된. 당신의 문제는 정확히 무엇입니까? – Sheridan
데이터베이스에 기존 코드 : 1001, 1002, 1003이 있습니다. 따라서 다음 코드는 1004가되어야합니다. 코드 텍스트 상자에 '1001'을 넣으면 정확히 거기에갑니다. regenerateCode (helper); // 1001, regenerateCode (helper); // 1002, regenerateCode (helper); // 1003, regenerateCode (helper); // 1004 -이 시점에서 문자열 코드는 정상이며 1004 코드를 반환해야하지만 그다지 중요하지 않습니다. return helper; // 마지막 줄에서 다시 regenerateCode (helper)로 이동합니다. // 1001 regenerateCode (helper); // 1002 – user13657
데이터베이스에서 가장 높은 '코드'번호를 찾고 계십니까? 아니면 찾으려는 코드 번호 시퀀스에 '간격'이 있습니까? – Sheridan