PDA

View Full Version : سوال: اخطار تکراری بودن کد بایگانی و نمایش یک پیام



sajadzare
دوشنبه 24 تیر 1392, 02:14 صبح
سلام

من خیلی جستجو کردم . چند مورد هم دیدم ولی به نتیجه نرسیدم چون من مبتدی هستم خواهش میکنم ساده توضیح بدین.

من یه جدول دارم که فراموش کردم فیلد کد بایگانی رو کلید تعریف کنم
و فعلا هم نمیخوام اینکارو بکنم
من چند تا تکست باکس دارم برای ورود اطلاعات به جدول که تکراری بودن اونها برام مهم نیست فقط تکست باکس شماره یکم کد بایگانی رو میگیره که دستی هم وارد میکنم . میخوام وقتی کاربر اطلاعات تکست باکس 1 رو وارد کرد و رفت روی تکست باکس 2 تکراری بودنش بررسی بشه و پیام بده که کد بایگانی تکراری است. میدونم توی یکی از رویدادهای text change باید کدنویسی کنم ولی نمیدونم چه کدی و کجا ؟ توی تکست 1 یا تکست 2.
اینم اطلاعات دیتا بیسم
parvandeh_tbl جدولم
raked_code کد بایگانی راکد

خواهشا اگه میخواین کمک کنین نیاین یه تیکه از کد رو بذارین چون من میخوام تمام اشیائی که لازمه رو هم توی برنامه بنویسم تا ارور نده

mohammad5530
دوشنبه 24 تیر 1392, 09:40 صبح
از چه طریقی به دیتابیس متصل شدی ؟

LINQ - ADO - EF ؟

mohammad kafiyan
دوشنبه 24 تیر 1392, 09:44 صبح
دقیقا بگویید که مقدار کد بایگانی که در textbox1 هست کجا ذخیره میشه

hamid_hr
دوشنبه 24 تیر 1392, 09:46 صبح
ببين تو رويداد Leave تكست باكس يك سلكت بايد اجرا كني به اين صورت
select count(*) from parvandeh_tbl where raked_code = ''
اگه خروجي صفر بود يعني اين كد تو ديتابيس وجود نداره
وي اگه بيشتر از صفر بود يعني تكراري هستش

sajadzare
سه شنبه 25 تیر 1392, 21:32 عصر
ممنون از نظراتتون ولی من مبتدی هستم متوجه دستور آخر نشدم

من برای ارتباط با دیتابیسم از این روش میرم



SqlConnection objconn = new SqlConnection();
objconn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\saja d\Documents\Visual Studio 2010\Projects\Bayegani\Bayegani\Database1.mdf;Inte grated Security=True;User Instance=True";
SqlCommand objcomm = new SqlCommand("select raked_code,kelase,shaki,motaham,eteham from parvandeh_tbl order by raked_code", objconn);
objconn.Open();
SqlDataReader myReader = objcomm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
DataView dv = new DataView(dt);
dataGridView1.DataSource = dv;
objconn.Close();

sajadzare
سه شنبه 25 تیر 1392, 21:39 عصر
و کد دکمه ذخیره اطلاعات هم اینه
میخوام اگه محتویات راکد تکست توی دیتابیس (توی فیلد راکد کد) وجود داشت بهم پیغام بده مسیج باکس.

private void save_btn_Click(object sender, EventArgs e)
{
if (raked_txt.Text != "" & kelase_txt.Text != "" & shaki_txt.Text != "" & motaham_txt.Text != "" & eteham_txt.Text != "")
{
cn.Open();
cmd.CommandText = "insert into parvandeh_tbl (raked_code,kelase,shaki,motaham,eteham) values ('" + raked_txt.Text + "' , '" + kelase_txt.Text + "', N'" + shaki_txt.Text + "' , N'" + motaham_txt.Text + "' , N'" + eteham_txt.Text + "' ) ";
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("ذخیره شد", "پیام");
raked_txt.Text = "";
kelase_txt.Text = "";
shaki_txt.Text = "";
motaham_txt.Text = "";
eteham_txt.Text = "";
cn.Close();
SqlConnection objconn = new SqlConnection();
objconn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\saja d\Documents\Visual Studio 2010\Projects\Bayegani\Bayegani\Database1.mdf;Inte grated Security=True;User Instance=True";
SqlCommand objcomm = new SqlCommand("select raked_code,kelase,shaki,motaham,eteham from parvandeh_tbl order by raked_code", objconn);
objconn.Open();
SqlDataReader myReader = objcomm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
DataView dv = new DataView(dt);
dataGridView1.DataSource = dv;
objconn.Close();


}
}

mohammad kafiyan
چهارشنبه 26 تیر 1392, 00:08 صبح
خوب کاری نداری dt را بررسی کن و شرط بگذار dt.rows.count() اگر اشتباه نکنم بزرگتر از صفر بود پس حتما رکوردی قبلا وجود داره و اجازه ثبت ندهید
در ضمن برای چک کردن که نیاز تمام فیلدهای رکورد را چک کنید کافی شما بیشتر فقط id و شماره تلفن و تلفن همراه و... که بیشتر به صورت یکتا هستند را کوئری بزنی

sajadzare
چهارشنبه 26 تیر 1392, 03:43 صبح
خوب کاری نداری dt را بررسی کن و شرط بگذار dt.rows.count() اگر اشتباه نکنم بزرگتر از صفر بود پس حتما رکوردی قبلا وجود داره و اجازه ثبت ندهید
در ضمن برای چک کردن که نیاز تمام فیلدهای رکورد را چک کنید کافی شما بیشتر فقط id و شماره تلفن و تلفن همراه و... که بیشتر به صورت یکتا هستند را کوئری بزنی

ممکنه دستور کاملشو برام بنویسی ؟ چطور شرط بذارم. کد کاملشو بنویس و بگو کجای برنامه ازش استفاده کنم.
ممنون از شما

hamid_hr
چهارشنبه 26 تیر 1392, 09:41 صبح
string sqlcmd = "select count(*) from parvandeh_tbl where raked_code = '" + raked_txt.Text + "';
cmd.CommandText = sqlcmd;

sqldatareader sdr = cmd.ExecuteReader(System.Data.CommandBehavior.Clos eConnection);

sdr.read();
int x = int.parse(sdr[0].tostring());
sdr.close();
if(x==0)
{
//ركرورد تكراري نيست
}
else
{
//ركورد تكراري هست
}

sajadzare
چهارشنبه 26 تیر 1392, 21:24 عصر
ممنون/ خیلی کمکم کردین. حالا یه سوال من این کد رو توی رویداد leave تکستباکس میذارم ولی چه کد تکراری باشه چه نباشه عمل ذخیره انجام میشه میخوام اگه کد تکراری بود و پیام هم به کاربر نمایش دادیم به تکست باکس بعدی نره ولی اگه تکراری نبود بره تکست باکس بعدی. این یه کار.... بعد توی رویداد کلید ذخیره هم میخوام چک کنه اگه کد بایگانی توی دیتابیس تکراری بود عملیات ذخیره انجام نشه. من کد دکمه ذخیره هم براتون میذارم لطفا ویرایشش کنید.


private void save_btn_Click(object sender, EventArgs e)
{
if (raked_txt.Text != "" & kelase_txt.Text != "" & shaki_txt.Text != "" & motaham_txt.Text != "" & eteham_txt.Text != "")
{
cn.Open();
cmd.CommandText = "insert into parvandeh_tbl (raked_code,kelase,shaki,motaham,eteham) values ('" + raked_txt.Text + "' , '" + kelase_txt.Text + "', N'" + shaki_txt.Text + "' , N'" + motaham_txt.Text + "' , N'" + eteham_txt.Text + "' ) ";
cmd.ExecuteNonQuery();
cmd.Clone();
MessageBox.Show("ذخیره شد", "پیام");
raked_txt.Text = "";
kelase_txt.Text = "";
shaki_txt.Text = "";
motaham_txt.Text = "";
eteham_txt.Text = "";
cn.Close();
SqlConnection objconn = new SqlConnection();
objconn.ConnectionString = @"Data Source=.\SQLEXPRESS;AttachDbFilename=C:\Users\saja d\Documents\Visual Studio 2010\Projects\Bayegani\Bayegani\Database1.mdf;Inte grated Security=True;User Instance=True";
SqlCommand objcomm = new SqlCommand("select raked_code,kelase,shaki,motaham,eteham from parvandeh_tbl order by raked_code", objconn);
objconn.Open();
SqlDataReader myReader = objcomm.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(myReader);
DataView dv = new DataView(dt);
dataGridView1.DataSource = dv;
objconn.Close();


}
}

sajadzare
چهارشنبه 26 تیر 1392, 21:45 عصر
دوستان تونستم حلش کنم نیازی به پاسخ نیست.
با این کار نیازی به تغییر در دکمه ذخیره نیست چون به هیچ وجه به مرحله ذخیره نمیرسه.
raked_txt.Focus();

tooraj_azizi_1035
پنج شنبه 27 تیر 1392, 11:46 صبح
سلام
شما باید این خط از کدتون رو در بلوک Try/Catch قرار بدید تا در صورت وقوع SqlException کنترل به قسمت catch منتقل بشه تا مطمئن شید که خطای تکراری بودن تولید شده:
try
{
SqlDataReader myReader = objcomm.ExecuteReader();
}
catch (SqlException)
{
//Dupp found!
}