PDA

View Full Version : سوال: مشکل ایت تابع برای تولید کد رهگیری چیه ؟



piramit
سه شنبه 26 مهر 1390, 12:14 عصر
public string coderahgiri()
{
SqlConnection cn = new SqlConnection(ConnectionString.MyConnectionString( ));
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cn.Open();
cmd.CommandText = "select * from tblStudent";
SqlDataReader reader = cmd.ExecuteReader();
Random rnd = new Random();
string coderahgiri = rnd.Next(10000000,100000000).ToString();
int i = 0;
//return coderahgiri;
while (reader.Read() == true)
{
if ((string)reader["stuCodeRahgiri"] == coderahgiri.ToString())
{
i++;
}
cn.Close();
if (i == 0)
{
return coderahgiri;
}
else
return null;
}
}

mehran_sh_t
سه شنبه 26 مهر 1390, 12:22 عصر
کد رو داخل تگ c# قرار بدید که راحت تر بشه خوند.
مشکلش کجاست؟ در واقع می خوای چیکار کنی که این کن نمی کنه؟ ارور میده؟ جواب درست نمیده؟

piramit
سه شنبه 26 مهر 1390, 12:31 عصر
در واقع یه تابع نوشتم که چک می کنه اعداد تصادفی تکراری نباشند . که در این تابع چک می کنه تکراری نباشند و در تابع دیگری میگه اگه تکراری بود دوباره تابع قبلی رو فراخانی کن.
ارور نمیده فقط از خو نام تابع ایراد می گیره یعنی میگه نباید return تو قسمت while باشد چون وقتی کل حلقه while رو comment می کنم و دستور return رو می نویسم این خط قرمز زیر نام تابع از بین می ره .
public string coderahgiri()
{
SqlConnection cn = new SqlConnection(ConnectionString.MyConnectionString( ));
SqlCommand cmd = new SqlCommand();
cmd.Connection = cn;
cn.Open();
cmd.CommandText = "select * from tblStudent";
SqlDataReader reader = cmd.ExecuteReader();
Random rnd = new Random();
string coderahgiri = rnd.Next(10000000,100000000).ToString();
int i = 0;
//return coderahgiri;
while (reader.Read() == true)
{
if ((string)reader["stuCodeRahgiri"] == coderahgiri.ToString())
{
i++;
}
cn.Close();
if (i == 0)
{
return coderahgiri;
}
else
return null;
}
}

A.S.Roma
سه شنبه 26 مهر 1390, 12:37 عصر
یک return null‌هم بعد از While‌بنویس . چون از نظر Compiler این احتمال وجود داره که شرط While‌درست نباشه

piramit
سه شنبه 26 مهر 1390, 12:42 عصر
خوب اونوقت دیگه اگه شروط بالا برقرار نباشه یا باشه می یاد و دستور آخر رو که return null هست رو اجرا می کنه و همواره خروجی null خواهد بود .در تابع زیر چک می کنم ببینم اگه خروجی null هست میگم دوباره فراخوانی کن تا بالاخره یه شماره پیدا کنی که تکراری نباشه.
public string coderahgiriUSE()
{
if (coderahgiri() == null)
{
coderahgiri();
}
return coderahgiri();
}

A.S.Roma
سه شنبه 26 مهر 1390, 13:21 عصر
من به Bussiness کدتون کاری ندارم.
همواره return null‌نمیشه.

چون دارید توی یک else if‌داخل while‌چک می کنید.

Saman Hashemi
سه شنبه 26 مهر 1390, 13:44 عصر
شما در یک تابع یا کلاس دیگه نمیتونید از نام همون تابع یا کلاس استفاده کنید...!