PDA

View Full Version : سوال در مورد استفاده از تابع SUM



پیام حیاتی
پنج شنبه 20 فروردین 1394, 10:13 صبح
سلام
این فرم برنامه هست :

130158

جدولی با نام student دارم که اطلاعات نام ، نام خانوادگی را از از طریق فرم می گیرد و در جدول ذخیره می کند ، بعد از ذخیره سازی شماره دانش آموزی را در label3 نمایش می دهد، برای دانشجو اول من شماره دانشجو (s_number) را برابر 100 قرار دادم حال می خوام زمانی که اطلاعات دانشجوی دوم را از طریق فرم ثبت می کنم ستون s_number یک واحد بهش اضافه بشه و در فیلد جدول قرار بگیره و در نهایت شماره دانشجو را در فرم نمایش بده.
لطفا" تصویر زیر را ببینید:

130157
مثلا" شماره 100 را با 1 جمع کند بشه 101 بعد 101 را در فیلد s_number مربوط به احمد مشایخی قرار دهد.
تشکر

pezhvakco
پنج شنبه 20 فروردین 1394, 12:50 عصر
نمی دونم اون ستون های دیگه رو با چه روشی ذخیره می کنید ولی با کد زیر میشه خواسته خودتون رو بدست بیارین



SELECT MAX([S_Number]) + 1 AS Expr1
FROM [dbo].Table01

پیام حیاتی
پنج شنبه 20 فروردین 1394, 13:12 عصر
نمی دونم اون ستون های دیگه رو با چه روشی ذخیره می کنید ولی با کد زیر میشه خواسته خودتون رو بدست بیارین



SELECT MAX([S_Number]) + 1 AS Expr1
FROM [dbo].Table01


این الآن select میکنه من می خوام با مقدار 1 جمع و در فیلد insert بشه.
این کدهای مربوطه به اضافه کردن اطلاعات نام و نام خانوادگی :

string Query = "INSERT INTO student (s_name, s_family) VALUES (N'" + name.Text + "' , N'" + family.Text + "')";

pezhvakco
شنبه 22 فروردین 1394, 17:04 عصر
بر اساس کد نویسی که دارین

INSERT INTO student
(s_name, s_family, S_Number)
VALUES (N'" + name.Text + "' , N'" + family.Text + "',
(SELECT MAX([S_Number]) + 1
FROM [dbo].student))

مهدی نان شکری
شنبه 22 فروردین 1394, 17:44 عصر
با سلام و کسب اجازه از دوست خوبم pezhvakco
راه کار ارائه شده در زمان همزمانی دچار مشکل خواهد شد و ممکن است سک کد دو بار ثبت شود.
برای این مورد باید از lock استفاده کنید تا مشکل همزمانی رفع شود.

مثلا می توانید به صورت زیر عمل کنید

begin tran
declare @x as int
set @x = (select isnull(max(id),0)+1 from test with(xlock,HOLDLOCK));


یا از Sequence استفاده کنید