View Full Version : پیدا کردن بزرگترین آیدی ، وقتی که هیچ رکوردی نیست !
بیتا حکمت
پنج شنبه 03 اردیبهشت 1394, 13:06 عصر
سلام . من یه کوئری دارم که به این صورت هست . وقتی رکوردی تو جدول نیس خطا می ده . به خاطر همین مجبورم قبل تر از این یه کوئری دیگه بنویسم که چک کنه ببینه ایا در جدول رکوردی هست یا خیر . اگر بیش از یک رکورد وجود داشت MaxID رو پیدا کنه . اما احساس می کنم روش بهتری هم باید وجود داشته باشه . یا به عبارتی یک جای کارم مشکل داره .
SqlCeConnection conn = new SqlCeConnection(puclicclass.strcon);
conn.Open();
SqlCeCommand comm = new SqlCeCommand("SELECT MAX(ID_subgroups ) FROM subgroups where User_Code="+puclicclass.current_user_code.ToString(), conn);
lastsubgroupcode = (Int32)comm.ExecuteScalar();
conn.Close()
golbafan
پنج شنبه 03 اردیبهشت 1394, 13:14 عصر
سلام کافیه قبل از این خط :
lastsubgroupcode = (Int32)comm.ExecuteScalar();
RecordCount را چک کنید...
در عیر این صورت با خطای عدم امکان تبدیل null به integer مواجه میشید...
golbafan
پنج شنبه 03 اردیبهشت 1394, 13:17 عصر
میتونید یک راه دیگه رو هم امتحان کنید (البته راه قبلی که گفتم بهتره)
اونم این که این کوئری رو چک کنید و اگر جواب از صفر بیشتر بود کوئری خودتون رو بزنید:
SqlCeCommand comm = new SqlCeCommand("SELECT COUNT(ID_subgroups ) FROM subgroups where User_Code="+puclicclass.current_user_code.ToString (), conn);
محمد آشتیانی
پنج شنبه 03 اردیبهشت 1394, 15:26 عصر
سلام
اگر از SqlServer استفاده می کردید ، میتونستید با شرط ISNULL مقدار بازگشتی NULL رو چک کنید ، مثل مثال زیر
SELECT ISNULL(MAX(id),0) AS [Result] FROM TEST
اما در SqlCE ، این دستور پشتیبانی نمیشه و بجاش میشه به اینصورت انجام داد.
SELECT (CASE WHEN MAX(id) IS NULL THEN 0 ELSE MAX(id) END) AS [Result] FROM TEST
در هر دو کوئری ، در صورت NULL بودن نتیجه ، مقدار صفر برمیگردونه که در کوئری در نظر گرفتیم.
* کوئری های بالا برای فیلدی بنام id در جدول فرضی TEST نوشته شده.
موفق باشید.
plus
پنج شنبه 03 اردیبهشت 1394, 15:39 عصر
لزومی نداره که مستقیما مقدار ExecuteScalar رو Cast کنید. میتونید خروجی رو بررسی کنید.
SqlCeConnection conn = new SqlCeConnection(puclicclass.strcon);
conn.Open();
SqlCeCommand comm = new SqlCeCommand("SELECT MAX(ID_subgroups ) FROM subgroups where User_Code="+puclicclass.current_user_code.ToString (), conn);
object result = comm.ExecuteScalar();
if (result is int) {
lastsubgroupcode = (Int32)result;
}
else {
lastsubgroupcode = 0;
}
conn.Close()
vBulletin® v4.2.5, Copyright ©2000-1403, Jelsoft Enterprises Ltd.