PDA

View Full Version : پيدا كردن شماره آخرين سطر اينزرت شده



TinaRezai
شنبه 15 مهر 1391, 06:31 صبح
سلام
يه جدول دارم كه ميخوام بعد از اينكه insert كردم توش id اونو كه identity تعريف كردم بدست بيارم. چطور بايد اينكارو بكنم؟

حسین شهریاری
شنبه 15 مهر 1391, 07:52 صبح
سلام

Max فیلد مربوطه را با یه Query بدست بیارین.

cmd.CommandText="Select Max(Id) As MaxNo From TableName"
cmd.ExecuteNonQuery();

موفق باشید

AmirGhasemi
شنبه 15 مهر 1391, 10:27 صبح
سلام
اگه اجازه بدهيد بنده حقير هم اساعه ادبي خدمتت دوستان بكنم
هر چند راه پيشنهادي جناب حسين آقاي شهرياري هم خوبه و كاربردي!! منتها روش توصيه شده اي نيست!! اگه فردا روزي يك نفر بطور دستي يك آيدي با مقدار بزرگ وارد ديتابيس كرد اونوقت شما پس از هر بار ماكزيمم گرفتن اون مقدار دستي اون بنده خدا را كچ كمي كنيد و آيدي جديد را نمي گيريد!!!
فرمان Insert را با پارامتر Scope_Identity() انجام دهید...



INSERT INTO Billing_Fish (price, shomare, date, type, tID) VALUES (@price, @shom, @date, @type, @tid);
SELECT CAST (scope_identity() AS INT);

id = cmd.ExecuteScalar()


رومش دومي هم هست كه با استفاده از استورد پروسيجرهاست
بدين صورت

CREATE PROCEDURE [dbo].[Management_UserRoles_Insert]
(
@ID bigint OUTPUT,
@UserName nvarchar (30),
@RoleID int
)
AS
INSERT INTO Management_UserRoles
([UserName], [RoleID])
VALUES
(@UserName, @RoleID)
SET @ID= @@IDENTITY

TinaRezai
شنبه 15 مهر 1391, 12:23 عصر
خيلي ممنون آقاي قاسمي اما فيلدي كه من دارم identity هست و كاربر نميتونه توش مقدار وارد كنه گذشته از اون قرار نيست كاربر به ديتا هاي من دسترسي داشته باشه.

AmirGhasemi
شنبه 15 مهر 1391, 14:04 عصر
عزيز من!! در هيچ پروژه اي كاربر قرار نيست به ديتاها دسترسي پيدا كنه!!!!!!!!! اما SQL injection شنيده ايد؟!!؟!؟!؟!؟!؟!؟!!؟!؟!؟!؟!؟!؟!؟! ؟!؟!؟!؟!؟!؟!؟!؟!؟!؟!!!؟!؟!؟!؟!؟!؟! ؟!؟!؟!؟!؟!!؟!

morteza271
شنبه 15 مهر 1391, 14:16 عصر
من هم با دوستمون آقای قاسمی موافقم!
بهتره از استور پروسیجور استفاده کنید و id رو برگردایند.
روشی که دوستمون اول گفتن درسته ولی باعث میشه که یک کوئری اضافی اجرا بشه و سرعت و کارایی رو کم میکنه!
اینو گفتم چون من هم قبلا یه همچین اشتباهی کرده بودم و سرعت برنامم خیلی پایین اومده بود(البته برنامه من تحت شبکه بود!) و کاربرهای برنامه کلی نق زدن و اعصابشون خرد شده بود!
فقط خواستم که شما اشتباه منو تکرار نکنید.