PDA

View Full Version : ثبت سطرهای datagrid در صورتی که قبلا ثبت نشده باشه و آپدیت در صورتی که قبلا ثبت شده باشه



نیما حتمی
شنبه 13 مهر 1392, 17:42 عصر
با سلام

دوستان من گریدمو کاربر دستی پر میکنه و با یه حلقه در بانک ذخیره میشه.تو وارد کردن مشکلی نیست.اما چطور بیام سطرهارو آپدیت کنم.بعضی وقتا کاربر میاد یه سطر به سطرها اضافه میکنه که این سطر باید در بانک insert شه بعضی وقتا هم سطرای قبلی رو تغییر میده و این تغییرات باید در بانک آپدیت شه.

نیما حتمی
شنبه 13 مهر 1392, 19:46 عصر
for (int i = 0; i < dataGridView4.Rows.Count; i++)


{

SqlDataAdapter inserttomali = new SqlDataAdapter("insert into MaliRecieve (ID,Shsanad,Shgh,NameM,FamilyM,Nametor,DateSabt,Da teRecieve,TypeRecieve,MonyRecieve,mablaghekol,Comm )values('" + dataGridView4.Rows[i].Cells[0].Value.ToString() + "','" + shgh.Text + "','" + shgh.Text + "','" + t.Rows[0][2] + "','" + t.Rows[0][3] + "','" + t.Rows[0][18] + "','" + dataGridView4.Rows[i].Cells[1].Value.ToString() + "','" + dataGridView4.Rows[i].Cells[2].Value.ToString() + "','" + dataGridView4.Rows[i].Cells[3].Value.ToString() + "','" + Convert.ToInt32(dataGridView4.Rows[i].Cells[4].Value.ToString().Replace(",", "")) + "','" + Convert.ToInt32(t.Rows[0][25]) + "','')", connect);

DataTable tmali = new DataTable(); inserttomali.Fill(tmali);


}

FastCode
شنبه 13 مهر 1392, 19:52 عصر
از دستور UPSERT استفاده کنید.جست و جو کنید.نمونه خیلی زیاد هست.

sohil_ww
شنبه 13 مهر 1392, 19:58 عصر
از دستور UPSERT استفاده کنید.جست و جو کنید.نمونه خیلی زیاد هست.

با اجازه آقا بهروز (سپاسگذارم ) این پیج خوب توضیح داده امیدوارم به کارت بیاد

لینک (http://www.sergeyv.com/blog/archive/2010/09/10/sql-server-upsert-equivalent.aspx)

نیما حتمی
شنبه 13 مهر 1392, 20:10 عصر
دوستان مرسی که کمک کردین ولی من زیاد سر درنیوردم از اون لینک.میشه ساده تر عنوان کنین

نیما حتمی
یک شنبه 14 مهر 1392, 13:16 عصر
دوستان من برنامه آپدیتو نوشتم و درست هم کار میکنه ولی در شرایطی که سطر جدید وارد نشده باشه و تعداد سطرها تغیییر نکرده باشه

مشکل من واسه زمانیه که سطری جدیدی کاربر وارد میکنه در این حالت یگه دیگه آپدیتی در کار نیست و باید Insert انجام شه.حالا اون سطری که کاربر وارد کرده رو از کجا پیدا کنیم(کدش چیه) که همون سطر یا سطرهارو insert کنیم؟

Boy_nn
یک شنبه 14 مهر 1392, 13:32 عصر
کاری نداره یه فیلد رو توی جدولت در نظر بگیر مثلا" id برای سطرهایی که از دیتابیس خونده میشن id مقدار داره ولی برای سطرهایی که جدید وارد شدن مقداری نداره
حالا کاری که باید بکنی این هست اطلاعات گریدتو خط به خط بخون اگه id مقدار داشت update وگرنه بهش مقدار بده و insert کن
به همین راحتی

FastCode
یک شنبه 14 مهر 1392, 13:35 عصر
select کن.اگر وجود نداشت یعنی باید insert بشه
جست و جو کن: DataRowState و http://msdn.microsoft.com/en-us/library/0f8054fy.aspx

Mahmoud.Afrad
یک شنبه 14 مهر 1392, 22:49 عصر
اول کوئری آپدیت بزن اگر انجام نشد اونوقت اینزرت کن(کد رو تست نکردم):

if (connect.State != ConnectionState.Open)
{
connect.Open();
}
for (int i = 0; i < dataGridView4.Rows.Count; i++)
{
SqlCommand cmd = new SqlCommand("UPDATE MaliRecieve SET Shsanad=@Shsanad , Shgh=@Shgh , NameM=@NameM , FamilyM=@FamilyM , Nametor=@Nametor , DateSabt=@DateSabt , DateRecieve=@DateRecieve , TypeRecieve=@TypeRecieve , MonyRecieve=@MonyRecieve , mablaghekol=@mablaghekol , Comm=@Comm WHERE ID=@ID ",connect);
cmd.Parameters.AddWithValue("@!D", Convert.ToInt32(dataGridView4.Rows[i].Cells[0].Value));
cmd.Parameters.AddWithValue("@Shsanad", shgh.Text);
cmd.Parameters.AddWithValue("@Shgh", shgh.Text);
cmd.Parameters.AddWithValue("@NameM", t.Rows[0][2]);
cmd.Parameters.AddWithValue("@FamilyM", t.Rows[0][3]);
cmd.Parameters.AddWithValue("@Nametor", t.Rows[0][18]);
cmd.Parameters.AddWithValue("@DateSabt", dataGridView4.Rows[i].Cells[1].Value.ToString());
cmd.Parameters.AddWithValue("@DateRecieve", dataGridView4.Rows[i].Cells[2].Value.ToString());
cmd.Parameters.AddWithValue("@TypeRecieve", dataGridView4.Rows[i].Cells[3].Value.ToString());
cmd.Parameters.AddWithValue("@MonyRecieve", Convert.ToInt32(dataGridView4.Rows[i].Cells[4].Value.ToString().Replace(",", "")));
cmd.Parameters.AddWithValue("@mablaghekol", Convert.ToInt32(t.Rows[0][25]));
cmd.Parameters.AddWithValue("@Comm", null);

int count = cmd.ExecuteNonQuery();
if (count == 0)
{
cmd.CommandText = "insert into MaliRecieve (ID,Shsanad,Shgh,NameM,FamilyM,Nametor,DateSabt,Da teRecieve,TypeRecieve,MonyRecieve,mablaghekol,Comm ) values(@ID,@Shsanad,@Shgh,@NameM,@FamilyM,@Nametor ,@DateSabt,@DateRecieve,@TypeRecieve,@MonyRecieve, @mablaghekol,@Comm)";
cmd.ExecuteNonQuery();
}
}
if (connect.State != ConnectionState.Closed)
{
connect.Close();
}

FastCode
یک شنبه 14 مهر 1392, 23:25 عصر
اول کوئری آپدیت بزن اگر انجام نشد اونوقت اینزرت کن(کد رو تست نکردم):

if (connect.State != ConnectionState.Open)
{
connect.Open();
}
for (int i = 0; i < dataGridView4.Rows.Count; i++)
{
SqlCommand cmd = new SqlCommand("UPDATE MaliRecieve SET Shsanad=@Shsanad , Shgh=@Shgh , NameM=@NameM , FamilyM=@FamilyM , Nametor=@Nametor , DateSabt=@DateSabt , DateRecieve=@DateRecieve , TypeRecieve=@TypeRecieve , MonyRecieve=@MonyRecieve , mablaghekol=@mablaghekol , Comm=@Comm WHERE ID=@ID ",connect);
cmd.Parameters.AddWithValue("@!D", Convert.ToInt32(dataGridView4.Rows[i].Cells[0].Value));
cmd.Parameters.AddWithValue("@Shsanad", shgh.Text);
cmd.Parameters.AddWithValue("@Shgh", shgh.Text);
cmd.Parameters.AddWithValue("@NameM", t.Rows[0][2]);
cmd.Parameters.AddWithValue("@FamilyM", t.Rows[0][3]);
cmd.Parameters.AddWithValue("@Nametor", t.Rows[0][18]);
cmd.Parameters.AddWithValue("@DateSabt", dataGridView4.Rows[i].Cells[1].Value.ToString());
cmd.Parameters.AddWithValue("@DateRecieve", dataGridView4.Rows[i].Cells[2].Value.ToString());
cmd.Parameters.AddWithValue("@TypeRecieve", dataGridView4.Rows[i].Cells[3].Value.ToString());
cmd.Parameters.AddWithValue("@MonyRecieve", Convert.ToInt32(dataGridView4.Rows[i].Cells[4].Value.ToString().Replace(",", "")));
cmd.Parameters.AddWithValue("@mablaghekol", Convert.ToInt32(t.Rows[0][25]));
cmd.Parameters.AddWithValue("@Comm", null);

int count = cmd.ExecuteNonQuery();
if (count == 0)
{
cmd.CommandText = "insert into MaliRecieve (ID,Shsanad,Shgh,NameM,FamilyM,Nametor,DateSabt,Da teRecieve,TypeRecieve,MonyRecieve,mablaghekol,Comm ) values(@ID,@Shsanad,@Shgh,@NameM,@FamilyM,@Nametor ,@DateSabt,@DateRecieve,@TypeRecieve,@MonyRecieve, @mablaghekol,@Comm)";
cmd.ExecuteNonQuery();
}
}
if (connect.State != ConnectionState.Closed)
{
connect.Close();
}


البته با transaction ه serializable