PDA

View Full Version : Update دیتابیس از طریق DataAdapter



in_the_rain
دوشنبه 03 اسفند 1388, 23:25 عصر
سلام به هه دوستان عزیز
من از طریق دیتا گرید میخوام مستقیماً دیتا بیس رو فقط آپدیت کنم نه اضافه نه حذف
وقتی که برای بار اول اطلاعات در دیتا بیس ذخیره میشن و من بدون اینکه برنامه ببندم بخوام آپدیت کنم خطا میده
کسی میتونه به من کمک کنه؟ لطف بزرگی در حق من میکنید
concurrency violation the updatecommand affected 0 of the expected 1 records

این هم تمام کد مربوط به آپدیت اطلاعات




private void btnEdit_Click(object sender, EventArgs e)
{
string strConn = "server=(local);database=check1;uid=sa;pwd=sa";
SqlConnection sqlConn = new SqlConnection(strConn);

SqlCommand comm = new SqlCommand("select * from Taghsit",sqlConn);
SqlDataAdapter da = new SqlDataAdapter();
DataSet ds = (DataSet)dataGridViewTaghsit.DataSource;


da.SelectCommand = new SqlCommand("select * from Taghsit", sqlConn);

da.Fill(ds, "TempTaghsit");

SqlCommandBuilder comBuilder = new SqlCommandBuilder(da);
da.FillSchema(ds, SchemaType.Mapped, "Taghsit");


da.UpdateCommand = comBuilder.GetUpdateCommand();




DataTable dt = ds.Tables[0].GetChanges(DataRowState.Modified);


if(dt !=null)
{
try

{
dt = ds.Tables[0].GetChanges(DataRowState.Modified);
da.Update(dt);
ds.Tables[0].AcceptChanges();
MessageBox.Show("¢نیی©ں¢ ¨¦ی©ى ¬§");
da.Dispose();
comBuilder.Dispose();
comm.Dispose();
dt.Dispose();
ds.Dispose();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message+ex.Source+ "¦لں §© £ ¢ ںلéںمں¢");
}
}

#region comment


#endregion comment

}

خواهش میکنم اگه کسی میتونه کمک کنه

majjjj
سه شنبه 04 اسفند 1388, 08:40 صبح
سلام
چون شما فقط میخواهی update رو روی تیبل هات انجام بدی میتونید از sqlcommandbuilder استفاده کنید

sqlconnection conn=new sqlconnection


conn.connectionstring="رشته اتصاب به بانک"
و

sqldataadapter da=new sqldataatapter("select * from table1",conn);
و

sqlcommandbuilder cb=new sqlcommandbuilder(da);
و در نهایت

da.update(dt);

in_the_rain
یک شنبه 08 فروردین 1389, 10:51 صبح
سلام ممنون از پاسخ شما
اما همه اینایی که گفتید توی کد هست
من متوجه اشکال کدم نشدم
ممنونم

alireza_s_84
یک شنبه 08 فروردین 1389, 11:17 صبح
سلام به هه دوستان عزیز
من از طریق دیتا گرید میخوام مستقیماً دیتا بیس رو فقط آپدیت کنم نه اضافه نه حذف
وقتی که برای بار اول اطلاعات در دیتا بیس ذخیره میشن و من بدون اینکه برنامه ببندم بخوام آپدیت کنم خطا میده
کسی میتونه به من کمک کنه؟ لطف بزرگی در حق من میکنید
concurrency violation the updatecommand affected 0 of the expected 1 records

این هم تمام کد مربوط به آپدیت اطلاعات


private

void btnEdit_Click(object sender, EventArgs e)
{
string strConn = "server=(local);database=check1;uid=sa;pwd=sa";
SqlConnection sqlConn = newSqlConnection(strConn);

SqlCommand comm = newSqlCommand("select * from Taghsit",sqlConn);
SqlDataAdapter da = newSqlDataAdapter();
DataSet ds = (DataSet)dataGridViewTaghsit.DataSource;



da.SelectCommand =

newSqlCommand("select * from Taghsit", sqlConn);

da.Fill(ds, "TempTaghsit");

SqlCommandBuilder comBuilder = newSqlCommandBuilder(da);
da.FillSchema(ds, SchemaType.Mapped, "Taghsit");



da.UpdateCommand = comBuilder.GetUpdateCommand();





DataTable dt = ds.Tables[0].GetChanges(DataRowState.Modified);


if(dt !=null)
{
try


{
dt = ds.Tables[0].GetChanges(

DataRowState.Modified);
da.Update(dt);
ds.Tables[0].AcceptChanges();
MessageBox.Show("¢نیی©ں¢ ¨¦ی©ى ¬§");
da.Dispose();
comBuilder.Dispose();
comm.Dispose();
dt.Dispose();
ds.Dispose();

}
catch (Exception ex)
{
MessageBox.Show(ex.Message+ex.Source+ "¦لں §© £ ¢ ںلéںمں¢");
}
}


#region

comment



#endregion comment

}

خواهش میکنم اگه کسی میتونه کمک کنه


سلام دوست عزیز:
دیتابیس شما هیچ رکوردی رو آپدیت نمیکنه واسه همین میگه برای بروز رسانی یک رکورد باید بروز بشه اما رکوردهای بروز شده در دیتابیس برابره 0. این یعنی یا شرط شما برای بروز رسانی هیچ رکوردی رو پیدا نمیکنه (فیلر رو ایراد داره) یا در هنگام اجرای Command خطایی رخ میده(که باید Command اصلاح بشه)
اگر میخوای بدونی که Command واقعا کار میکنه میتونی هنگام اجرا یک Breakpoint بذاری و عبارت SQL ایجاد شده رو مستقیما توی دیتابیس اجرا کنی.
موفق باشید