PDA

View Full Version : مشکل اضافه شدن شماره فاکتور



jprogramer
شنبه 01 بهمن 1390, 11:51 صبح
با سلام من قبلا هم این مورد را اطلاع دادم اما متاسفانه جوابی نگرفتم امیدوارم این سری ...
جدولی دارم که یکی از فیلد هایش واسه شماره فاکتور استفاده میشه (factorno)یه تابع تو همین سایت پیدا کردم که میره از بانک بزرگترین شماره رو پیدا میکنه و و اونو با عدد 1 جمع میزنه, اما مشکلی که هست بعد از تولید عدد10 می بایست عدد 11 الی... تولید بشه که متاسفانه دوباره همون عدد 10 رو تولید میکنه .
اینم کد تابع:

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();
با تشکر فراوان

mehdin69
شنبه 01 بهمن 1390, 12:27 عصر
من دقیقاً همین کد رو دارم اجرا می کنم و دارم جواب میگیرم
تا 103 تست کردم هیچ مشکلی نداشت ولی توصیه میکنم بهت یه Function توی Sql بنویس تا این کار رو برات انجام بده

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