PDA

View Full Version : سوال: حذف تمام اطلاعات یک جدول با لینکیو



hahaie
یک شنبه 29 مرداد 1391, 12:18 عصر
سلام.دستوری که مربوط به حذف تمام اطلاعات یک جدول(بدون هیچ قید و شرطی) با استفاده از دستورات لینکیوه چیه؟

mehdi.mousavi
یک شنبه 29 مرداد 1391, 13:56 عصر
سلام.دستوری که مربوط به حذف تمام اطلاعات یک جدول(بدون هیچ قید و شرطی) با استفاده از دستورات لینکیوه چیه؟

سلام.
شما می تونید با استفاده از DataContext.ExecuteCommand (http://stackoverflow.com/questions/1516962/linq-to-sql-how-to-clear-a-table-fast) دستور SQL مورد نظر رو اجرا کنید... اما وقتی می گید بی قید و شرط، این موضوع به ذهن میرسه که مایلید Trigger ها و Constraint های موجود روی جدول نادیده گرفته بشه. برای این کار، باید بدین شکل عمل کنید:


--disable constarints and triggers...
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL
ALTER TABLE MyTable DISABLE TRIGGER ALL

--delete or truncate table...
DELETE MyTable

--enable constarints and triggers...
ALTER TABLE MyTable CHECK CONSTRAINT ALL
ALTER TABLE MyTable ENABLE TRIGGER ALL

اینجا، ابتدا Trigger ها و Constraint ها روی MyTable بطور موقت غیر فعال میشن، داده ها از جدول حذف میشن (میتونید از TRUNCATE نیز برای این کار استفاده کنید)، سپس Trigger ها و Constraint ها مجددا Enable میشن. بنابراین، توصیه می کنم Stored Procedure ای برای اینکار درست کنید، و اون SP رو از طریق کد فراخوانی کنید تا کدتون Loosely Coupled باشه (و اگر فردا به هر دلیلی منطق حذف کردن دادها تغییر کرد، مجبور به تغییر برنامه و Compile مجدد اون نباشید).

موفق باشید.

پاورقی: LINQ رو مدت هاست که "لینک" تلفظ می کنن. اوائل، برخی اونو "لینکیو" تلفظ می کردن، اما مدت هاست که این مساله به دست فراموشی سپرده شده. :)

hahaie
یک شنبه 29 مرداد 1391, 15:03 عصر
ممنون دوست عزیز اما منظورم استفاده از دستورات لینک به sql در داخل سی شارپ بود.
راستی چطوری میشه مثلا تمامی رکوردها از یک جدول خرید رو ک کالای "بیسکوییت" رو خرید کرده اند حذف کرد.با استور پروسیجر خیلی راحته اما میخوام بدونم دستورات لینکش چیه؟
ممنون

saeid taheri
یک شنبه 29 مرداد 1391, 22:18 عصر
سلام
فکر کنم کدهای زیر مشکل شما رو حل کنه

DBEntities Context = new DBEntities();
(from l in Context.Links
where l.linkID == linkID
select l).ToList().ForEach(Context.DeleteObject);

موفق باشی

kamrannazari
جمعه 21 مهر 1391, 14:17 عصر
--disable constarints and triggers...
ALTER TABLE MyTable NOCHECK CONSTRAINT ALL
ALTER TABLE MyTable DISABLE TRIGGER ALL

--delete or truncate table...
DELETE MyTable

--enable constarints and triggers...
ALTER TABLE MyTable CHECK CONSTRAINT ALL
ALTER TABLE MyTable ENABLE TRIGGER ALL



عزيز يك stored procedure درست كن كد بالا رو در اون قرار بده
و سپس Stored procedure رو در LINQ اضافه كنيد و دقيقا مثل يك متد از اون استفاده كنيد

kordestan
سه شنبه 29 اسفند 1391, 21:38 عصر
سلام...کسی میدونه کد من رو کامل کنه ..... میخوام کل محتویات جدول رو با زدن یک linklabel حذف کنم و دیتا گرید رو به روز کنم


var db = new manegmentDataContext();
var q =new Tbl_Kharid();
؟؟؟؟.؟؟؟؟
dg_print.DataSource = q;

kordestan
سه شنبه 29 اسفند 1391, 22:27 عصر
خودم پیداش کردم:
var db = new manegmentDataContext();
var del = from d in db.Tbl_Kharids select d;
db.Tbl_Kharids.DeleteAllOnSubmit(del);
db.SubmitChanges();
:تشویق:
آفرین به خودم

piroozman
شنبه 10 فروردین 1392, 12:33 عصر
راحترين روش
context.Entities.DeleteAllOnSubmit(dc.Entities);
يا

context.ExecuteCommand("DELETE FROM EntityName");