PDA

View Full Version : پیدا کردن بزرگترین آیدی ، وقتی که هیچ رکوردی نیست !



بیتا حکمت
پنج شنبه 03 اردیبهشت 1394, 12: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, 12:14 عصر
سلام کافیه قبل از این خط :

lastsubgroupcode = (Int32)comm.ExecuteScalar();

RecordCount را چک کنید...

در عیر این صورت با خطای عدم امکان تبدیل null به integer مواجه میشید...

golbafan
پنج شنبه 03 اردیبهشت 1394, 12:17 عصر
میتونید یک راه دیگه رو هم امتحان کنید (البته راه قبلی که گفتم بهتره)

اونم این که این کوئری رو چک کنید و اگر جواب از صفر بیشتر بود کوئری خودتون رو بزنید:

SqlCeCommand comm = new SqlCeCommand("SELECT COUNT(ID_subgroups ) FROM subgroups where User_Code="+puclicclass.current_user_code.ToString (), conn);

محمد آشتیانی
پنج شنبه 03 اردیبهشت 1394, 14: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, 14: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()