PDA

View Full Version : مبتدی: خطا بعد از مقایسه صحیح اطلاعات دیتابیس.



rayson
دوشنبه 31 تیر 1392, 20:34 عصر
با سلام به دوستان.
تک کد زیر چک میکنه اطلاعات کد عضویت تکراری نباشه اگر بود پیغام میدهد که تکراری ولی اگر نباشد اطلاعات ثبت میکند.
زمانی که پیغام میدهد بعد ادامه دستورات را اجرا میکند که یا به خطا تبدیل میشود و یا خانه کد عضویت خالی را ذخیره میکند.
لطفا راهنمایی کنید.







// Sabt Etela'at Karmandan
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlCommand com = new SqlCommand();
SqlCommand com2 = new SqlCommand();

int check = 0;
com2.Connection = con;
com2.CommandType = CommandType.Text;
com2.CommandText = "select count(*) from employ where code_ozviat='"+ txt_code_ozviat.Text +"'";
com2.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);
con.Open();
check = Convert.ToInt32(com2.ExecuteScalar());
con.Close();
if (check > 0)
{
txt_code_ozviat.BackColor = Color.OrangeRed;
MessageBox.Show("کد عضویت وارد شده تکراری میباشد", "توجه");
txt_code_ozviat.BackColor = Color.White;
txt_code_ozviat.Text = "";

} else

com.CommandText="insert into employ(name,family,code_meli,tarikh_tavalod,sh_sh, name_pedar,tell,adres,name_adres_daftar,code_ozvia t,tarikh_ozviat,email) values (@name,@family,@code_meli,@tarikh_tavalod,@sh_sh,@ name_pedar,@tell,@adres,@name_adres_daftar,@code_o zviat,@tarikh_ozviat,@email)";

string day_tavalod,day_ozviat, month_tavalod,month_ozviat, years_tavalod,years_ozviat,birth,ozv;
day_tavalod = cmb_tavalod_rooz.Text;
month_tavalod = cmb_tavalod_mah.Text;
years_tavalod = cmb_tavalod_sal.Text;
day_ozviat = cmb_ozviat_rooz.Text;
month_ozviat = cmb_ozviat_mah.Text;
years_ozviat = cmb_ozviat_sal.Text;
birth = years_tavalod + "/" + month_tavalod + "/" + day_tavalod;
ozv = years_ozviat + "/" + month_ozviat + "/" + day_ozviat;
com.Parameters.AddWithValue("@name", txt_name.Text);
com.Parameters.AddWithValue("@family", txt_family.Text);
com.Parameters.AddWithValue("@code_meli", txt_code_meli.Text);
com.Parameters.AddWithValue("@tarikh_tavalod", birth);
com.Parameters.AddWithValue("@sh_sh", txt_sh_sh.Text);
com.Parameters.AddWithValue("@name_pedar", txt_name_pedar.Text);
com.Parameters.AddWithValue("@tell", txt_tell.Text);
com.Parameters.AddWithValue("@adres",txt_adres.Text);
com.Parameters.AddWithValue("@name_adres_daftar",txt_name_adres_daftar.Text);
com.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);
com.Parameters.AddWithValue("@tarikh_ozviat", ozv);
com.Parameters.AddWithValue("@email", txt_email.Text);


con.Open();
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات با موفقیت ثبت گردید", "توجه");
//end succes information


همچنین:
من میخوام برای این خانه از برنامه این حساسیت را بگذارم که اگر هنگام ثبت مقدار خانه خالی بود پیغام خطا داده شود.
کد برای اینکار مناسب است ؟ و در کدام بخش باید این کد را قرار بدهم؟

if (txt_code_ozviat.Text == "")
{
MessageBox.Show("لطفا کد عضویت را وارد کنید ", "توجه");

}

sohil_ww
دوشنبه 31 تیر 1392, 20:41 عصر
با سلام به دوستان.
تک کد زیر چک میکنه اطلاعات کد عضویت تکراری نباشه اگر بود پیغام میدهد که تکراری ولی اگر نباشد اطلاعات ثبت میکند.
زمانی که پیغام میدهد بعد ادامه دستورات را اجرا میکند که یا به خطا تبدیل میشود و یا خانه کد عضویت خالی را ذخیره میکند.
لطفا راهنمایی کنید.







// Sabt Etela'at Karmandan
SqlConnection con = new SqlConnection();
con.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\data computer.org\Documents\sm.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True";
SqlCommand com = new SqlCommand();
SqlCommand com2 = new SqlCommand();

int check = 0;
com2.Connection = con;
com2.CommandType = CommandType.Text;
com2.CommandText = "select count(*) from employ where code_ozviat='"+ txt_code_ozviat.Text +"'";
com2.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);
con.Open();
check = Convert.ToInt32(com2.ExecuteScalar());
con.Close();
if (check > 0)
{
txt_code_ozviat.BackColor = Color.OrangeRed;
MessageBox.Show("کد عضویت وارد شده تکراری میباشد", "توجه");
txt_code_ozviat.BackColor = Color.White;
txt_code_ozviat.Text = "";

} else

com.CommandText="insert into employ(name,family,code_meli,tarikh_tavalod,sh_sh, name_pedar,tell,adres,name_adres_daftar,code_ozvia t,tarikh_ozviat,email) values (@name,@family,@code_meli,@tarikh_tavalod,@sh_sh,@ name_pedar,@tell,@adres,@name_adres_daftar,@code_o zviat,@tarikh_ozviat,@email)";

string day_tavalod,day_ozviat, month_tavalod,month_ozviat, years_tavalod,years_ozviat,birth,ozv;
day_tavalod = cmb_tavalod_rooz.Text;
month_tavalod = cmb_tavalod_mah.Text;
years_tavalod = cmb_tavalod_sal.Text;
day_ozviat = cmb_ozviat_rooz.Text;
month_ozviat = cmb_ozviat_mah.Text;
years_ozviat = cmb_ozviat_sal.Text;
birth = years_tavalod + "/" + month_tavalod + "/" + day_tavalod;
ozv = years_ozviat + "/" + month_ozviat + "/" + day_ozviat;
com.Parameters.AddWithValue("@name", txt_name.Text);
com.Parameters.AddWithValue("@family", txt_family.Text);
com.Parameters.AddWithValue("@code_meli", txt_code_meli.Text);
com.Parameters.AddWithValue("@tarikh_tavalod", birth);
com.Parameters.AddWithValue("@sh_sh", txt_sh_sh.Text);
com.Parameters.AddWithValue("@name_pedar", txt_name_pedar.Text);
com.Parameters.AddWithValue("@tell", txt_tell.Text);
com.Parameters.AddWithValue("@adres",txt_adres.Text);
com.Parameters.AddWithValue("@name_adres_daftar",txt_name_adres_daftar.Text);
com.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);
com.Parameters.AddWithValue("@tarikh_ozviat", ozv);
com.Parameters.AddWithValue("@email", txt_email.Text);


con.Open();
com.Connection = con;
com.ExecuteNonQuery();
con.Close();
MessageBox.Show("اطلاعات با موفقیت ثبت گردید", "توجه");
//end succes information


همچنین:
من میخوام برای این خانه از برنامه این حساسیت را بگذارم که اگر هنگام ثبت مقدار خانه خالی بود پیغام خطا داده شود.
کد برای اینکار مناسب است ؟ و در کدام بخش باید این کد را قرار بدهم؟

if (txt_code_ozviat.Text == "")
{
MessageBox.Show("لطفا کد عضویت را وارد کنید ", "توجه");

}

دادشه گلم شما نیاز نیست برای چک کردن 1 آیدی تو دیتابیست اینقدر کد بزنی فقط کافی هنگام تعریف دینا بیست فیلد دیتا بیستو از توع unique تعریف کنی که دیگه مقدار تکراری نگیره

و حالا سوالت شما می تونی کل کد چک کردن بانکتو تو شرط (چک کردن تکس باکست )قرار بدی

rayson
دوشنبه 31 تیر 1392, 20:47 عصر
دادشه گلم شما نیاز نیست برای چک کردن 1 آیدی تو دیتابیست اینقدر کد بزنی فقط کافی هنگام تعریف دینا بیست فیلد دیتا بیستو از توع unique تعریف کنی که دیگه مقدار تکراری نگیره

و حالا سوالت شما می تونی کل کد چک کردن بانکتو تو شرط (چک کردن تکس باکست )قرار بدی

از آنجایی که کار با دیتابیس من ضعیف است مجبور به کار گیری این کد ها شدم.
اگر امکانش هست روشی که میگید به طور کامل توضیح بدید ممنون میشم.
با تشکر

sohil_ww
دوشنبه 31 تیر 1392, 21:09 عصر
من قبلا تو همین تالار توضیح دادم 1 سرچ بزنی پیدا می کنی

sohil_ww
دوشنبه 31 تیر 1392, 21:11 عصر
بیا داداش اینم جواب سئوالت
CREATE TABLE Persons
(

این دستور می گه من 1 جد.ل می خوام ایجاد کنم به نام persons


P_Id int NOT NULL,

و این خط کد میاد 1 ستون به نام p_ID نوع int و اینکه این فیلد نمی تواند خالی باشد و باید مقدار بگیره

LastName varchar(255) NOT NULL,

اینم به همون صورت بالا ولی با نوع Varchar


FirstName varchar(255),
Address varchar(255),
City varchar(255),

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

و حالا دستور
UNIQUE (P_Id)

این دستور میاد فیلد (p_ID) از نوع UNIQUE تعریف می کنه و حالا این کد چی هست

UNIQUE به معنی منحصر به فرد است و حالا توضیحش

دقیقا مثل pirimery key یعنی 1 محدویت برای فیلد ایحاد می کنن یعنی این که این فیلد نمی تونن مقدار های یکسان داشته باشن ما تو جدول فقط 1 perimery key می تونیم داشته باشیم ولی تا دلت می خواد unique تعریف کن حالشو ببر

rayson
دوشنبه 31 تیر 1392, 21:27 عصر
من الان باید در قسمت کد دیتابیس باید UNIQUE code_ozviat را وارد کنم ؟

sohil_ww
دوشنبه 31 تیر 1392, 21:53 عصر
دیتا بیست با کد ایجاد کردی ؟ اره
اگه نه که الان لینک آموزش می زارم برات

sohil_ww
دوشنبه 31 تیر 1392, 21:54 عصر
این لینک کامل بهتون توضیح می ده که چیکار باید بکنید مشکلی بود در خدمتم

msdn (http://msdn.microsoft.com/en-us/library/ms190024.aspx)

rayson
دوشنبه 31 تیر 1392, 23:50 عصر
این لینک کامل بهتون توضیح می ده که چیکار باید بکنید مشکلی بود در خدمتم

msdn (http://msdn.microsoft.com/en-us/library/ms190024.aspx)

سلام دوست من مشکل من این نیست.
من مطالب را خوندم و متوجه شدم که منظور من را درست متوجه نشیدید.
فیلد که چک میشود خود کلید اصلی من اشتباه کردم و این کد قرار دادم ولی با اینکه برداشتم باز همان خطا میده .
زمانی که مقدار تکراری وارد میشه کلا برنامه خطا میده و نمیدونم که چیکار باید بکنم که به جای خطا و استوپ شدن برنامه پیغام من را بده و منتظر صحیح وارد شدن ( تکراری نبودن) مقدار فیلد مورد نظر بشه.
من اینترنتم قطع شد تا الان :((
ممنون میشم که راهنمایی کنید .
با تشکر

sohil_ww
سه شنبه 01 مرداد 1392, 10:22 صبح
از مدیریت استثنا try و catch استفاده کن

mz6488
سه شنبه 01 مرداد 1392, 11:09 صبح
ما تو جدول فقط 1 perimery key می تونیم داشته باشیم ولی تا دلت می خواد unique تعریف کن حالشو ببر
کی گفته فقط میتونیم یه primary key داشته باشیم؟؟؟

hamid_0341
سه شنبه 01 مرداد 1392, 11:40 صبح
چرا با linq نمیری ؟
کارت خیلی ساده تر میشه

khokhan
سه شنبه 01 مرداد 1392, 11:47 صبح
دادشه گلم شما نیاز نیست برای چک کردن 1 آیدی تو دیتابیست اینقدر کد بزنی فقط کافی هنگام تعریف دینا بیست فیلد دیتا بیستو از توع unique تعریف کنی که دیگه مقدار تکراری نگیره

و حالا سوالت شما می تونی کل کد چک کردن بانکتو تو شرط (چک کردن تکس باکست )قرار بدی

اشکال در این دو خط کد هست
استفاده از پارامتر ها :لبخند:


com2.CommandText = "select count(*) from employ where code_ozviat='"+ txt_code_ozviat.Text +"'";
com2.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);

Mahmoud.Afrad
سه شنبه 01 مرداد 1392, 12:56 عصر
خط 26 به بعد در هر صورت اجرا میشن چون کدهای قسمت else رو در بلاک {} قرار ندادی.

rayson
سه شنبه 01 مرداد 1392, 17:42 عصر
اشکال در این دو خط کد هست
استفاده از پارامتر ها :لبخند:


com2.CommandText = "select count(*) from employ where code_ozviat='"+ txt_code_ozviat.Text +"'";
com2.Parameters.AddWithValue("@code_ozviat", txt_code_ozviat.Text);
دوست عزیز خوخان منظورتون از اشکال چی هست ؟ یعنی کد درست کار میکند ولی بهنه نیست ؟

خط 26 به بعد در هر صورت اجرا میشن چون کدهای قسمت else رو در بلاک {} قرار ندادی.

محمد جان درست گفتید من دقت نکرده بودم مشکل برطرف شد. مرسی.

چرا با linq نمیری ؟
کارت خیلی ساده تر میشه
اولین برنامه اصلی من هست آموزش کامل LinQ را که کاربر عزیز Raziee قرار دادن را دارم مطالعه میکنم مرسی بابت راهنمای.
http://barnamenevis.org/showthread.php?193300

با تشکر.

sohil_ww
سه شنبه 01 مرداد 1392, 17:51 عصر
کی گفته فقط میتونیم یه primary key داشته باشیم؟؟؟

تا اونجایی که من می دونم هر جدول می تونه 1 primary key داشته باشه


and each table can have only ONE primary key.

اینم لینکش
http://www.w3schools.com/sql/sql_primarykey.asp

اینم 1 منبع دیگه

A table can contain only one PRIMARY KEY constraint.

http://msdn.microsoft.com/en-us/library/ms189039.aspx

rayson
سه شنبه 01 مرداد 1392, 17:56 عصر
ا اونجایی که من می دونم هر جدول می تونه 1 permary key داشته باشه
دوستمان صحیح میگه این امکان وجود دارد که چند کلید اصلی داشته باشید.
هنگامی که فیلد ها را با نام مناسب ایجاد کردید ، دکمه Ctrl بگیرید و خانه مورد نظر خود را پریمری کنید.