PDA

View Full Version : انتقال تمام رکورد های یک جدول به جدول دیگر



Mansoor92
شنبه 28 دی 1392, 15:53 عصر
سلام دوستان

من دوتا جدول با دقیقا یک مشخصات دارم حالا میخام وقتی کاربر روی یک کلید کلیک کرد تمامی اطلاعات از جدول اول پاک بشن و منتقل بشن به جدول دوم

ممنون میشم راهنماایی کنید

fmehrvarzi
شنبه 28 دی 1392, 16:08 عصر
اگر منظورتون دیتاتیبل هست که این کد:
private void CopyDataTable(DataTable table){
// Create an object variable for the copy.
DataTable copyDataTable;
copyDataTable = table.Copy();

// Insert code to work with the copy.
}
سوال دیگه ای

hamid_hr
شنبه 28 دی 1392, 16:10 عصر
الان کجاش موندی؟
تو دستورات sql
تو دستورات سی شارپش

Mansoor92
شنبه 28 دی 1392, 16:26 عصر
الان کجاش موندی؟
تو دستورات sql
تو دستورات سی شارپش

سلام
الان توی دستوارت entity موندم که چطور بنویسم تا اطلاعت کاملا کپی بشن داخل یک جدول دیگه و بعدش از جدول اولی پاک بشن...

Mahmoud.Afrad
شنبه 28 دی 1392, 18:41 عصر
هدفت از انجام این کار چیه؟

در یک تراکنش و در یک حلقه foreach به ازای هر آبجکت از جدول اول یک شئ از جدول دوم بساز و مقداردهی و اینزرت کن. بیرون حلقه هم تغییرات رو ذخیره کن.

Mansoor92
شنبه 28 دی 1392, 19:05 عصر
هدفت از انجام این کار چیه؟

در یک تراکنش و در یک حلقه foreach به ازای هر آبجکت از جدول اول یک شئ از جدول دوم بساز و مقداردهی و اینزرت کن. بیرون حلقه هم تغییرات رو ذخیره کن.

سلام خدمت شما

هدف از انجام این کار آرشیو کردن اطلاعات هست

میشه لطفا اگر کدی دارید قرار بدید

ممنونم

Mahmoud.Afrad
یک شنبه 29 دی 1392, 10:24 صبح
این کار درست نیست. نگران افت سرعت نباشید.

اما به هر حال باید به صورت زیر عمل کنی(در جدول دوم که آرشیو هست ، کلید اصلی نباید به صورت اتوماتیک مقدار بگیره چون کلید همونیه که در جدول قبلی بوده)

Database1Entities db = new Database1Entities();
DbTransaction transaction = null;
try
{
if (db.Connection.State != ConnectionState.Open)
{
db.Connection.Open();
}
transaction = db.Connection.BeginTransaction();

foreach (tbl t1 in db.tbl)
{
tbl2 t2 = new tbl2
{
id = t1.id,
name = t1.name,
family = t1.family
};

db.AddTotbl2(t2);
db.DeleteObject(t1);
}

db.SaveChanges();
transaction.Commit();
MessageBox.Show("انجام شد");
}
catch (Exception ex)
{
if (transaction != null)
{
transaction.Rollback();
}
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
}

Mansoor92
یک شنبه 29 دی 1392, 11:50 صبح
این کار درست نیست. نگران افت سرعت نباشید.

اما به هر حال باید به صورت زیر عمل کنی(در جدول دوم که آرشیو هست ، کلید اصلی نباید به صورت اتوماتیک مقدار بگیره چون کلید همونیه که در جدول قبلی بوده)

Database1Entities db = new Database1Entities();
DbTransaction transaction = null;
try
{
if (db.Connection.State != ConnectionState.Open)
{
db.Connection.Open();
}
transaction = db.Connection.BeginTransaction();

foreach (tbl t1 in db.tbl)
{
tbl2 t2 = new tbl2
{
id = t1.id,
name = t1.name,
family = t1.family
};

db.AddTotbl2(t2);
db.DeleteObject(t1);
}

db.SaveChanges();
transaction.Commit();
MessageBox.Show("انجام شد");
}
catch (Exception ex)
{
if (transaction != null)
{
transaction.Rollback();
}
}
finally
{
if (transaction != null)
{
transaction.Dispose();
}
}



ممنونم که پاسخ دادید

یعنی اگر رکوردها به 5میلیون هم برسه بازم باعث افت سرعت نمیشه؟؟؟