سلام من می خوام وقتی کاربر فیلد تکراری وارد کرد . در پایگاه داده ام که اکسس است جستجو انجام بدم. و سپس اگر تکراری بود پیام بده . این جستج رو چطوری انجام بدم؟
سلام من می خوام وقتی کاربر فیلد تکراری وارد کرد . در پایگاه داده ام که اکسس است جستجو انجام بدم. و سپس اگر تکراری بود پیام بده . این جستج رو چطوری انجام بدم؟
خب اگه پایگاهتو در یه dataGridView بریزی می تونی از روش ساده زیر استفاده کنی
foreach (DataGridViewRow dgr in dataGridView1.Rows)
if (dgr.Cells["نام فیلد مورد نظر برای جستجو"].Value.ToString() == textBox1.Text)
MessageBox.Show("Error");
این کد میاد مقادیر موجود یک فیلد رو در دیتاگرید مقایسه میکنه
می تونید اطلاعات رو در یک datatable یا یک لیست قرار بدید و به جای جستجو در پایگاه داده در این لیست جستجو کنید. این لیست مشخصه که باید update بشه
از پاسختون ممنونم. میشه بیشتر توضیح بدین. نفهمیدم.
فرض کنید می خواید اسم تکراری وارد نشه. تمام اسم ها یا قسمتی که لازم می شه رو بخونید و در یک لیست ژنریک قرار بدید.
List<string> names=....
حالا وقتی اسمی وارد می شه می تونید از دستور زیر استفاده کنید
if (names.IndexOf( new name )!=-1)
{
تکراری
}
و اگر اسم تکراری نبود بعد از ذخیره در دیتابیس، اسم رو به لیست اضافه کنید.
نیازی به این کارا نیست....
cmd.CommandText="select * from users where username='GoogleA5'";
connection.Open();
SqlDataReader reader=cmd.ExecuteReader();
if(reader.Read())
{
//GoogleA5 exists
}
reader.Close();
connection.Close();
...
موفق باشید/
...
Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."
فکر می کنم هر چی کمتر به طور مستقیم سراغ دیتابیس بریم بهتره.cmd.CommandText="select * from users where username='GoogleA5'";
connection.Open();
SqlDataReader reader=cmd.ExecuteReader();
if(reader.Read())
{
//GoogleA5 exists
}
reader.Close();
connection.Close();
اینجا دو تا روش گفته شد. روشی که دوستمون sajjadlove در پست6 گفتند و روشی که من پیشنهاد دادم. هر دو درست هستند و معایب و مزایای خودشون رو دارن. هر کدوم براتون راحت تره، همون رو استفاده کنید.
شما داده ها رو از دیتابیس می خونید، مثلا با datareader یا اونها رو در یک table قرار می دید یا از معماری سه لایه استفاده می کنید، به هر روش، بالاخره داده ها رو دارید. فرض کنید یکی از فیلدهای شما فیبد نام هست و نمی خواید که نام تکراری وارد دیتابیس بشه. اگه این فیلد کلید باشه برنامه به شما خطا می ده. می تونید از این خطا استفاده کنید. اگه کلید نباشه، یا به هر دلیلی نخواید هنگام update خطا رخ بده، می تونید مثل روش پست 6 ابتدا چک کنید نام تکراری هست یا نه. اما روشی که من گفتم.
شما یک لیست ژنریک درست می کنید. فرض می کنیم فیلد نام از نوع string هست.
List<string> names=new List<string>();
حالا این لیست رو با نام هایی که از دیتابیس خوندید به هر روشی که دوست دارید پر می کنید. مثلا با foreach
foreach (DataRow row in Table)
names.Add ( row["Name"].ToString());
حالا نام ها رو خوندید و اونها رو در لیست دارید. وقتی نام جدیدی قراره وارد دیتابیس بشه، چک می کنید آیا این مقدار در لیست شما یعنی names هست یا نه. اگر بود نمی گذارید تراکنش انجام بشه. برای اینکه ببینید مقداری در لیست هست یا نه از IndexOf می تونید استفاده کنید. اگه مقدار در لیست نباشه خروجی IndexOf می شه 1-
اگر نام تکراری نبود و نام رو وارد دیتابیس کردید، این نام رو باید به لیست خودتون اضافه کنید تا برای نام های بعدی مورد بررسی قرار بگیره. همچنین اگر نامی رو از دیتابیس Delete کردید اون رو از لیست هم با تابع Remove حذف کنید.