PDA

View Full Version : چطور میشه قبل از ذخیره داده از identity که خودکار سیستم میده مطلع شم



modern_amin
شنبه 31 تیر 1391, 17:15 عصر
با سلام و تبریک ماه رمضان
همونطور که از عنوان سوال مشخصه ، من میخام قبل ثبت یک فرد در سیستم (قبل از insert) به کاربر برنامه identity سطری که قراره ذخیره بشه رو نمایش بدم
نکته1=با توجه به اینکه ممکنه سطرهایی پاک شوند من نمیتونم بصورت دستی مطلع بشم
نکته2=شماره identity بصورت خودکار به هر سطر داده میشه

hakan648
شنبه 31 تیر 1391, 19:04 عصر
سلام

SELECT IDENT_CURRENT('TableName') + 1

===

بروز رسانی : البته زمانی +1 صحیح هست که افزایش IDENTITY هم یک تعیین شده باشه . در غیر این صورت باید مقدار افزایش IDENTITY رو بدست آورد و اضافه کرد .

baktash.n81@gmail.com
یک شنبه 01 مرداد 1391, 07:26 صبح
خوب اگه به چند کاربر همزمان Identity یکسان نمایش داده بشه چی ؟! این کار از نظر منظق یکم مشکل داره ... چرا قراره id رو به کاربر نمایش بدی ؟!

modern_amin
سه شنبه 03 مرداد 1391, 15:50 عصر
خوب دقیقا ممکنه چندکاربر همزمان ثبت کنند....

چون به کاربر بگم این شناسه ثبت سیستم به این فرد هست ، بعدا جستجو و .... رو با این کد ساده تر انجام بده...

modern_amin
سه شنبه 03 مرداد 1391, 16:09 عصر
SELECT IDENT_CURRENT('TableName') + 1
.
.
ایییییییییییییین کد جواب نمیده و هی null بر میگردونه ، نحوه نگارشه صحیحش دقیقا چطوریه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
آیا identity واقعی رو برمیگردوونه؟ (منظورم اینه یعنی اگر 20 سطر تو دیتابیس ثبت شده و بعد کاربر بیاد 10 تا سطر آخر رو پاک کنه ، هنگام ثبت سطر جدید آیدنتیتی سطر جدیدباید 21 بشه ، نه که 11 بشه)
آیا میشه؟

baktash.n81@gmail.com
چهارشنبه 04 مرداد 1391, 08:20 صبح
شما بهتره اول به کاربر اجازه بدی کلید ثبت اطلاعات رو بزنه و اگه سیستم بدون مشکل اطلاعات رو ثبت کرد کد ثبت شده رو به کاربر برگردونی ....

modern_amin
چهارشنبه 04 مرداد 1391, 14:42 عصر
1- کاری ندارم ثبت بشه یا نه ، میخام بگم اگر عملیات ثبت انجام بشه کد فرد این عدد می باشد
2- عملیات ثبت رو طوری نوشتم که انجام بشه و تا جایه محکم به خطایی نخوره...

baktash.n81@gmail.com
چهارشنبه 04 مرداد 1391, 15:50 عصر
خوب پس ... اون کد Identity رو بیخیال شو ... یعنی بزار باشه به عنوان کلید اصلی ولی کاری باهاش نداشته باش ...
شما یه ظرف احتیاج داری از شماره های موجود ... وقتی فرم ثبت اطلاعات باز می شه من اولین کد در دسترس رو از این ظرف بر می دارم اگه ازش استفاده کردم که توی یه فیلد تو دیتابیسم ثبتش می کنم ... اگه هم کاربر فرم رو بست یا ثبت رو کنسل کرد عدد رو بر می گردونم به ظرف ... فقط می مونه مواقعی که شما عدد رو از تو ظرف بر می داری ولی به هر دلیل نه ثبتش می کنی نه برش می گردونی به ظرف ... در اون موقع می تونی یه سرویس داشته باشی که هر چند وقت یکبار شماره های ثبت شده در جدول کاربر رو با ظرف چک کنه ... ببینه عددی هست که تو ظرف نباشه و رکوردی هم براش ثبت نشده باشه ... ایم ظرف در واقع یه جدول که 2 تا فیلد داره عدد و وضعیت ... وضعیت می تونه قابل استفاده - استفاده شده - رزرو شده باشه ...

البته شاید روشهای بهتری هم وجو داشته باشه ... مثالا اگه GUID برات مشکلی ایجاد نمی کنه می تونه از اون استفاده کنی ...

hakan648
یک شنبه 08 مرداد 1391, 19:54 عصر
SELECT IDENT_CURRENT('TableName') + 1

TableName : نام جدولی که میخواید IDENTITY رو ازش دریافت کنید .



ایییییییییییییین کد جواب نمیده و هی null بر میگردونه ، نحوه نگارشه صحیحش دقیقا چطوریه؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟
آیا identity واقعی رو برمیگردوونه؟ (منظورم اینه یعنی اگر 20 سطر تو دیتابیس ثبت شده و بعد کاربر بیاد 10 تا سطر آخر رو پاک کنه ، هنگام ثبت سطر جدید آیدنتیتی سطر جدیدباید 21 بشه ، نه که 11 بشه)
بلاخره null برمیگردونه یا 11 ؟

sadaf_
دوشنبه 09 مرداد 1391, 01:04 صبح
سلام

SELECT IDENT_CURRENT('TableName') + 1

من همه جوره تست کردم و جوابها هم درست بوده

baktash.n81@gmail.com
دوشنبه 09 مرداد 1391, 07:45 صبح
دوست عزیزی که این روش Ident_Current رو پیشنهاد دادی لطفا بفرمایید اگه دونفر باهم این کد رو اجرا کنند چی می شه ؟!

Hamid Reza Rahimi
دوشنبه 09 مرداد 1391, 08:49 صبح
خوب پس ... اون کد Identity رو بیخیال شو ... یعنی بزار باشه به عنوان کلید اصلی ولی کاری باهاش نداشته باش ...
شما یه ظرف احتیاج داری از شماره های موجود ... وقتی فرم ثبت اطلاعات باز می شه من اولین کد در دسترس رو از این ظرف بر می دارم اگه ازش استفاده کردم که توی یه فیلد تو دیتابیسم ثبتش می کنم ... اگه هم کاربر فرم رو بست یا ثبت رو کنسل کرد عدد رو بر می گردونم به ظرف ... فقط می مونه مواقعی که شما عدد رو از تو ظرف بر می داری ولی به هر دلیل نه ثبتش می کنی نه برش می گردونی به ظرف ... در اون موقع می تونی یه سرویس داشته باشی که هر چند وقت یکبار شماره های ثبت شده در جدول کاربر رو با ظرف چک کنه ... ببینه عددی هست که تو ظرف نباشه و رکوردی هم براش ثبت نشده باشه ... ایم ظرف در واقع یه جدول که 2 تا فیلد داره عدد و وضعیت ... وضعیت می تونه قابل استفاده - استفاده شده - رزرو شده باشه ...

البته شاید روشهای بهتری هم وجو داشته باشه ... مثالا اگه GUID برات مشکلی ایجاد نمی کنه می تونه از اون استفاده کنی ...

سلام چه کاریه از یک Transaction استفاده میکنی اگر داده ها ثبت شد اون Commit میکنی در غیر اینصورت Rollback میشه

Felony
دوشنبه 09 مرداد 1391, 09:05 صبح
دوست عزیزی که این روش Ident_Current رو پیشنهاد دادی لطفا بفرمایید اگه دونفر باهم این کد رو اجرا کنند چی می شه ؟!
یک عدد به هر دوشون نشون داده میشه ، این تابع وظیفه دادن کلید یا شماره منحصر به فرد یا ... به هر کاربر یا Connection رو نداره که میگید چی میشه ؛ این تابع فقط Ident فعلی کلید اصلی جدول رو برمیگردونه و Ident کلید اصلی تا زمان اضافه نشدن یک رکورد به جدول یا Reseed نشدن مقدار Ident ثابت هست ، حالا چه 1 کاربر اون کد رو اجرا کنه ، چه 1000 کاربر در هر صورت جواب یکی هست و اگر میخواین تو برنامه چند کاربره یا تحت شبکه یا همچین چیزی ازش استفاده کنید کارتون کاملا اشتباه هست .

baktash.n81@gmail.com
دوشنبه 09 مرداد 1391, 12:05 عصر
خوب بنده هم عرض کردم اشتباه هست ... !! روشی که ایشون ارائه دادن برای این سئوال مناسب نیست ...

modern_amin
شنبه 28 مرداد 1391, 16:38 عصر
عالی بود ، واقعا کار راه بنداز بود ....

fakhravari
یک شنبه 29 مرداد 1391, 00:30 صبح
command.CommandText = "INSERT INTO [Employee] (Name) VALUES (@Name); SELECT SCOPE_IDENTITY()";
int id = (int)command.ExecuteScalar();