PDA

View Full Version : فوری:درج همزمان



nimamohammadi
دوشنبه 19 بهمن 1388, 12:26 عصر
سلام
یک شماره اتوماتیک دارم که می خوام همزمان با اینکه در بانک ذخیره میشه در یک textbox هم نمایش داده بشه
چطور میتونم این کارو انجام بدم؟

sky_in_iran
دوشنبه 19 بهمن 1388, 16:27 عصر
سلام
یک شماره اتوماتیک دارم که می خوام همزمان با اینکه در بانک ذخیره میشه در یک textbox هم نمایش داده بشه
چطور میتونم این کارو انجام بدم؟

سلام دوست عزيز
منظورت و واضح تر بگو تا اساتيد بتونن كمكت كنن . "یک شماره اتوماتیک دارم " اين شماره رو تو برنامه به وجود مياري يا از autonumber استفاده مي كني ؟

nimamohammadi
دوشنبه 19 بهمن 1388, 16:55 عصر
با sql 2008 .از طریق تعریف فیلدی از نوع bigint که identity اونو yes کردم.
می خوام وقتی دکمه ثبت و زدم و شماره اتوماتیک در بانکم ایجاد شد همون لحظه در فرمم توی یک text box اون عدد نمایش داده بشه.

rana-writes
دوشنبه 19 بهمن 1388, 18:01 عصر
سلام
شما میتونین وقتی کد درج رو، یعنی بعد از اینکه insert کردین توی بانک، با یه دستور select آخرین رکورد درج شده رو بازیابی کنین و طبیعتا مقدار فیلد مورد نظر رو واکشی کنین و توی یه text box نمایش بدین
موفق باشین

nimamohammadi
دوشنبه 19 بهمن 1388, 18:34 عصر
لطفا راهنمایی کنید چطوری باید مشخص کنم اخرین رکوردو واکشی کنه

البته این رکوردی که می خوام در هر نوبت واکشی بشه خودش کلیده اصلیه.

FastCode
دوشنبه 19 بهمن 1388, 21:08 عصر
پس بهتره که از Max استفاده کنید سینتکسش هم توی گوگل هست.

Link (http://www.sql-tutorial.net/SQL-MAX.asp)

nimamohammadi
دوشنبه 19 بهمن 1388, 21:52 عصر
لططططططططططططططططططفا
چطوری با این دستور می تونم مقدار رو در یک textbox نمایش بدم.

rana-writes
دوشنبه 19 بهمن 1388, 22:58 عصر
خب برای واکشی آخرین رکورد شما باید یه تابع بنویسین که توش دستورات T_Sql داشته باشه
به این شکل:



public static int MaxCode()
{
int Row = 0;
SqlConnection connection = Connection.ConnectToDB();
string sql = " SELECT MAX( FildName ) FROM TableName";
SqlCommand command = new SqlCommand(sql, connection);
command.CommandType = CommandType.Text;
SqlDataReader reader = command.ExecuteReader(CommandBehavior.SingleResult | CommandBehavior.CloseConnection);


if (reader.Read())
{
Row = reader.GetInt32(0);
}


return Row;



توی این تابع، تو قسمت string sql بخش fieldname اسم فیلدی که میخواین max رو بگیرین و توی TableName هم اسم جدولتون رو می نویسین
حالا دو تا کار دیگه می مونه
اول استفاده از این تابع و دوم هم خط سوم کد که ارتباط با بانک رو از اونجا برداشتیم
برای استفاده از تابع به این شکل عمل میکنین:



int AutoId = CommonClasses.MaxCode();
Txt1.Text = Convert.ToString(AuotId);




اگه تابع رو داخل کلاس گذاشته باشین، این خط بالا بهتون کمک میکنه در واقع CommonClasses اسم کلاسیه که این تابع توش نوشته شده .
اینکه اینطوری نوشتم برای اینه که اگه توابع پرکاربرد رو توی کلاس استفاده کنین، میتونین همه جای برنامه ازش استفاده کنین

برای ارتباط با بانک هم ترجیحا بهتره یک کلاس تعریف کنیم و تابع ارتباط با بانک رو به این شکل توش تعریف کنیم:



public static SqlConnection ConnectToDB()
{
string ConnectionString = "Data Source=.;Initial Catalog=umpire;Integrated Security=True";
SqlConnection connection = new SqlConnection(ConnectionString);
try
{
connection.Open();
}
catch(SqlException)
{


}
return connection;



}


موفق باشین

nimamohammadi
سه شنبه 20 بهمن 1388, 10:35 صبح
ممنون از راهنماییتون ولی چن تا سوال دارم

connect to DB()
یه اسمه ؟

common classes
error میده

Txtlname
یعنی چی؟

sky_in_iran
چهارشنبه 21 بهمن 1388, 11:31 صبح
دوست عزيز تو بخش selected بنويس :




select top 1 id from tablename order by id desc

slashslash2009
چهارشنبه 21 بهمن 1388, 12:19 عصر
هم میتونی از تیبل استفاده کنی هم اینکه بایند یا bind کنی. مقدار select رو در یک دیتا تیبل بریز البته باید جلوی شرط یک چیزه منحصر بفرد بزاری مثلا همون id

textbox1.text=dt.Rows[0][0].ToString();واسه بیند کردن هم میتونی به این صفحه بری
http://barnamenevis.org/forum/showthread.php?t=203388

unique1984
چهارشنبه 21 بهمن 1388, 13:40 عصر
سلام
استفاده از max و top خوبه، اما راحت تر از اونها هم وجود داره.
نمیدونم دستتوراتتون رو در C#‎‎ می نویسین یا در غالب StoreProcedure ؟
من چون از sp استفاده میکنم ، برای چنین کاری اینو می نویسم:

INSERT INTO Tbl(...) values(...)
SELECT @@IDENTITY

@@IDENTITY آخرین کد درج شده رو برمیگردونه.
اگر نیاز به کد و توضیح بیشتری هست بفرمائید.

rana-writes
چهارشنبه 21 بهمن 1388, 15:04 عصر
سلام
از آخر میام به اول
کد آخر رو اشتباه نوشته بودم، حالا این Txt1 هم اسم یه تکست باکسه

همونطور که گفتم:


اگه تابع رو داخل کلاس گذاشته باشین، این خط بالا بهتون کمک میکنه در واقع CommonClasses اسم کلاسیه که این تابع توش نوشته شده .
اینکه اینطوری نوشتم برای اینه که اگه توابع پرکاربرد رو توی کلاس استفاده کنین، میتونین همه جای برنامه ازش استفاده کنین

پس CommonClasses اسم یک کلاسه، از منوی project روی گزینه Add Class کلیک کنین، اینطوری یک کلاس ساخته میشه و توابع رو داخل کلاس تعریف میکنین و میتونین هر جای برنامه که خواستین ازش استفاده کنین

با توجه به این کد:


SqlConnection connection = Connection.ConnectToDB();

ConnectToDB هم اسم یک تابع است که توی کلاس Connection تعریف شده. چون توی برنامه خیلی پیش میاد که باید از بانک استفاده بشه، این رو هم ترجیحا توی یه کلاس میندازیم و چندین بار استفاده میکنیم
موفق باشین

rana-writes
چهارشنبه 21 بهمن 1388, 17:59 عصر
سلام
استفاده از max و top خوبه، اما راحت تر از اونها هم وجود داره.
نمیدونم دستتوراتتون رو در C#‎‎‎ می نویسین یا در غالب StoreProcedure ؟
من چون از sp استفاده میکنم ، برای چنین کاری اینو می نویسم:

INSERT INTO Tbl(...) values(...)
SELECT @@IDENTITY

@@IDENTITY آخرین کد درج شده رو برمیگردونه.
اگر نیاز به کد و توضیح بیشتری هست بفرمائید.

سلام
منم برای دستورات T_Sql از storeprocedure استفاده می کنم، میشه بگین کارکرد این دستور چطوریه؟
ممنون

unique1984
چهارشنبه 21 بهمن 1388, 21:46 عصر
زمانی که شما خاصیت Identity یک فیلد رو با yes تنظیم می کنید ، Identity@@ بعد از ثبت یک رکورد ، مقدار نسبت داده شده به اون فیلد رو بر میگردونه و از اونجایی که فیلد کلید ما identity هستش ، اینجا آخرین و در واقع جدیدترین کد رو برمیگردونه.
همونطور که مشخصه Identity@@ فقط بعد از دستور Insert جواب میده.