PDA

View Full Version : ذخیره طالاعات گرید در دیتابیس



ELI994
سه شنبه 28 خرداد 1398, 11:22 صبح
با سلام
من یه گرید دارم که اطلاعات یک جدول رو توی اون ریختم و میخوام اطلاعات هر ردیف رو بدون اینکه اون ردیف تکراری باشه تو دیتا بیس درج کنم
عمل درج رو تو حالت عادی انجام میدم ولی مشکل اینجاست که اگر کاربر ندونهو دکمه درج رو دوباره بزنه فیلد تکراری درج میشه
میخوام یه شرط بزارم که چندتا فیلد رو بررسی کنه در صورت نبودن اونها درج رو انجام بده هر کاری می کنم شرطم درست کار نمیکنه لطفا راهنمایی کنید .
for (int i = 0; i < dg1.Rows.Count - 1; i++) {
string cmd = "";
QueryOfprg y = new QueryOfprg();
string sel = "select * from test where pid ='" + dg1.Rows[i].Cells["pid"].Value + "' And Month= '" + Month.SelectedIndex + "' And year= '" + year.Text + "' ";


if (sel.Count() < 0)
{
//textBox1.Text= "error";
QueryOfprg n = new QueryOfprg();
//,shogl,khedmat,nahiyeh,estekhdam
// try
// {
cmd = "insert into test (PId,TimeKar,karkard,nobatkar,tatil , morakhasiS , Gheybat , Mamoriat " +
" , MorakhasiE ,MorakhasiL,Keshik,EzafeA,EzafeT,Saier,Month,year)" +
" values('" + dg1.Rows[i].Cells["PId"].Value + "'" +
//,'" + dg1.Rows[i].Cells["shogl"].Value + "'" +
//,'" + dg1.Rows[i].Cells["khedmat"].Value + "' " +
// " , '" + dg1.Rows[i].Cells["nahiyeh"].Value + "' , '" + dg1.Rows[i].Cells["estekhdam"].Value + "'"+
" , '" + dg1.Rows[i].Cells["TimeKar"].Value + "'" +
" , '" + dg1.Rows[i].Cells["karkard"].Value + "'" +
" , '" + dg1.Rows[i].Cells["nobatkar"].Value + "', '" + dg1.Rows[i].Cells["tatil"].Value + "'" +
" , '" + dg1.Rows[i].Cells["morakhasiS"].Value + "', '" + dg1.Rows[i].Cells["Gheybat"].Value + "'" +
" , '" + dg1.Rows[i].Cells["Mamoriat"].Value + "', '" + dg1.Rows[i].Cells["MorakhasiE"].Value + "'" +
" , '" + dg1.Rows[i].Cells["MorakhasiL"].Value + "', '" + dg1.Rows[i].Cells["Keshik"].Value + "'" +
" , '" + dg1.Rows[i].Cells["EzafeA"].Value + "', '" + dg1.Rows[i].Cells["EzafeT"].Value + "'" +
" , '" + dg1.Rows[i].Cells["Saier"].Value + "', '" + Month.SelectedIndex + "' , '" + year.Text + "')";
// }
// catch
// {


// }
n.insert(cmd);
}
else { MessageBox.Show("فیلد قبلا ثبت شده!", "خطا در مقادیر", MessageBoxButtons.OK, MessageBoxIcon.Stop); }


}

Mahmoud.Afrad
سه شنبه 28 خرداد 1398, 12:19 عصر
یکبار خط به خط به روند کد دقت کنید. شما اصلا بررسی نکردید که سطری با اون اطلاعات وجود دارد یا نه(کوئری چک کردن را اجرا نکردید) در ضمن بهتره این کوئری را با exists بنویسید

یا یک unique-constraints ایجاد کنید و روند کنترل را به عهده دیتابیس بگذارید
https://docs.microsoft.com/en-us/sql/relational-databases/tables/unique-constraints-and-check-constraints

ELI994
سه شنبه 28 خرداد 1398, 12:29 عصر
string sel = "select * from test where pid ='" + dg1.Rows[i].Cells["pid"].Value + "' And Month= '" + Month.SelectedIndex + "' And year= '" + year.Text + "' ";
اینجا بررسی کردم دیگه . مگه درست نیست ؟

hamid_hr
چهارشنبه 29 خرداد 1398, 08:12 صبح
سلام
کلا اینطوری نوشتید
string sel = "select * from test where pid ='" + dg1.Rows[i].Cells["pid"].Value + "' And Month= '" + Month.SelectedIndex + "' And year= '" + year.Text + "' ";

if (sel.Count() < 0)
یعنی کوئری اجرا نشده است تا نتیجه رو چک کنید فقط داخل شرط طول متغییر string چک میشه