PDA

View Full Version : تابع ایجاد شماره افزایشی



jprogramer
یک شنبه 25 دی 1390, 12:52 عصر
با سلام خدمت دوستان
یه تابع تو همین سایت پیدا کردم که ازش واسه شماره فاکتور استفاده میکنم اما و قتی تا عدد 10 شماره تولید میکنه دیگه شماره بعدی رو یعنی عدد11 به بعد رو تولید نمیکنه .اگه کسی از دوستان راهنمایی بکنه ممنون میشم.
در ضمن اسم جدولم foroosh و اسم فیلدم تو جدول factorno هستش
private void factor_number();
{
SqlConnection con = new SqlConnection(strcon);
SqlCommand cmd = new SqlCommand("Select Max(factorno) From foroosh", con);
if (con.State == ConnectionState.Open)
con.Close();
con.Open();
long InvoiceNumber;
if (cmd.ExecuteScalar() != DBNull.Value)
InvoiceNumber = Convert.ToInt64(cmd.ExecuteScalar());
else
InvoiceNumber = 0;
con.Close();
lblfactorno.Text = (InvoiceNumber + 1).ToString();
}

ParsaNM
یک شنبه 25 دی 1390, 13:17 عصر
دوست عزيز نمي دونم تابعت چي هست .. ولي معمولا اگر روش به اين صورت باشه که بزرگترين عدد رو بدست مياره و بعلاوه يکش ميکنه ، معمولي ترين اشتباهي که باعث ميشه مشکل شما ايجاد بشه اينه که نوع خروجيت يا فيلدت عددي نيست ...! در اين صورت بهتره cast بشه ..!
اگر کدت رو ببينم شايد بهتر بتونم راهنمايي کنم ..!

jprogramer
دوشنبه 26 دی 1390, 08:15 صبح
سلام کد رو که واستون گذاشتم و به این صورت عمل میکنه هر بار که تابع فراخوانی میشه با مراجعه به جدول foroosh بزرگترین مقدار فیلد factorno را پیدا میکنه و اونو با عدد یک جمع میزنه

shadi khanum
دوشنبه 26 دی 1390, 09:05 صبح
نوع فیلدتون چیه؟ و اینکه بعد از عدد 10 خروجی اون Execute scaler چی میشه؟

jprogramer
دوشنبه 26 دی 1390, 09:15 صبح
نوع فیلدم( nchar(10 هستش و بعد از 10 دوباره خود عدد 10 تکرار میشه

jprogramer
دوشنبه 26 دی 1390, 10:45 صبح
کسی نیست جوابمو بده :گریه:

jprogramer
سه شنبه 27 دی 1390, 10:58 صبح
کسی نبود جوابم بدونه؟:متعجب::متعجب::متعجب:

shadi khanum
سه شنبه 27 دی 1390, 23:10 عصر
ببین دوست عزیز شما چون نوع اون فیلدتون nchar همیشه max رو 9 میگیره و واسه همین 10 برمیگردونه .. چون مقایسه رشته ای انجام میده و نه عددی و تو مقایسه رشته ای چون عدد سمت چپ 10 ، یکه اون رو از 9 کوچیکتر میدونه. یعنی تو مقایسه رشته ای به ترتیب از کاراکتر سمت چپ شروع میکنه و هرکدوم بزرگتر بود رو برمیگردونه..
حالا یا باید کلا نوع ستونت رو int بذاری (که به نظرم این بهتره واسه اینکه فیلد آیدی شمازشی نباید nchar باشه) یا اینکه کوئری که واسه max گرفتن مینویسی رو اینجوری تغییر بدی Select Max(factorno + 0) From foroosh
اینجوری مقایسه عددی انجام میده