PDA

View Full Version : سوال: استفاده از Linq to classes مکان پذیره در #C?



sayvan
پنج شنبه 22 تیر 1391, 16:34 عصر
سلام من جداولم رو فایل mdf در خود محیط2010 vs در Solution ایجاد کردم
الان میخوام با استفاده از linq to sql classes بتونم دستورات Insert Delete Update
رو بنویسم دستورات رو در asp نوشتم کاار هم میکنه ولی تو application دستوارت خطایی نمیده ولی تو بانک اضاف نمیشه
نمیدونم چرا؟:متعجب::متعجب::متعجب::مت جب::متعجب::متعجب::متعجب::متع ب:

Sirwan Afifi
پنج شنبه 22 تیر 1391, 21:46 عصر
کدتون رو بزارید ببینیم مشکل کجاست؟
از SQL Profiler استفاده کنید ببینید چه Queryرو به DB ارسال می کنه

sayvan
پنج شنبه 22 تیر 1391, 22:08 عصر
کدتون رو بزارید ببینیم مشکل کجاست؟

ممنونم آقای عفیفی
اینم کدم
//********************تغییر رمز*********************
DataClasses1DataContext db = new DataClasses1DataContext();
var search = from p in db.tblusers
where p.password == txtoldpass.Text
select p;
if (search.Count() != 0)
{
foreach (var item in search)
item.password = txtpass.Text;


MessageBox.Show("رمز برنامه با موفقیت تغییر یافت", "نبریک");
db.SubmitChanges();
}

از SQL Profiler استفاده کنید ببینید چه Queryرو به DB ارسال می کنه
نه اصلا نمیدونم چیه
ولی کدم در asp هیجچ مشکلی نداره و کار میکنه

Sirwan Afifi
جمعه 23 تیر 1391, 00:54 صبح
شرط رو بردارید یعنی به این صورت :

DataClasses1DataContext db = new DataClasses1DataContext();
var search = from p in db.tblusers
where p.password == txtoldpass.Text
select p;
foreach (var item in search)
item.password = txtpass.Text;


MessageBox.Show("رمز برنامه با موفقیت تغییر یافت", "نبریک");
db.SubmitChanges();

یه نکته : DataContext باید بعد از اتمام کارش Dispose بشه چون یه شیء Disposableه در نتیجه سعی کنید همیشه این قسمت رو داخل بلاک Using بنویسید :

using (DataClasses1DataContext db = new DataClasses1DataContext();)
{
.....

}

sayvan
جمعه 23 تیر 1391, 12:33 عصر
درود
اون شرط رو واسه این گذاشتم که در صورتی که رمز قبلی درست باشد رمز تغییر پیدا کنه
فکر نکنم تاثیری در کد داشته باشد
کدها اجرا میشه هیچ مشکلی نداره
حتی وقتی که برنامه رو اجرا میکنم رمز رو تغییر میدم دوباره میخوام تغییر بدم رمزی که تازه تغییر دادم رو قبول میکنه به عنوان رمز قبلی
ولی دوباره برنامه رو اجرا کنم انگار هیچ اتفاقی نیفتاده و تو دیتابیس چیزی عوض نمیشه و همان رمز اولیه وجود دارد

sayvan
جمعه 23 تیر 1391, 14:38 عصر
دوست عزیز الان تغییراتی رو که من در برنامه انجام میدم در بانک انجام نمیشه در صورتی که همه کداش درسته

samadblaj
جمعه 23 تیر 1391, 22:49 عصر
سلام پروژه رو build کن توجه داشته باش توی VS اطلاعات به صورت مجازی دخیره میشن از پروژه رو دخیره کن و برو فایل اجرایی پروژه رو اجرا کن می بینی که دخیره میکنه.

sayvan
شنبه 24 تیر 1391, 01:04 صبح
دوست عزیز درسته که ذخیره میشن
من میخوام بعد از ثبت از اطلاعات استفاده کنم.
الان من چند تا یوزر در برنامه ام تعریف میکنم جدول رو در دیتا گرید لود میکنم خالیه
از طریق فضای نام SqlClient میتونم این کارا رو انجام بدم ولی دوست دارم با لینک درستش کنم
آیا راهی وجود داره از یک دیتابیس واحد استفاده کنیم
نمیدونم چه جوری میشه این مشکل را حال کرد از مدیران تالار خواهش میکنم راهکاری ارائه بدن من موندم چیکار کنم

Mahmoud.Afrad
شنبه 24 تیر 1391, 05:49 صبح
خوب شما گفتید تا زمانی که برنامه ران هست تغییرات در دیتابیس اعمال میشه و وقتی دوباره برنامه رو دیباگ میکنید تغییرات قبلی از بین میره. من هم گفتم این به خاطر این هست که ویژوال استادیو دیتابیس اصلی رو دوباره کپی میکنه تو شاخه دیباگ.
اگر میخواهید اطلاعاتی از قبل داخل جداولتون وجود داشته باشه باید این اطلاعات رو به دیتابیسی که به پروژه اضافه کردید اضافه کنید. یعنی از طریق server explorer روی جدول مورد نظر از دیتابیس راست کلیک کرده و show table data رو انتخاب کنید. از این طریق میتونید کاربرهاتون رو تعریف کنید. با این کار اطلاعات در دیتابیس اصلی ثبت میشه.

sayvan
شنبه 24 تیر 1391, 10:37 صبح
يعني نميشه تو همان برنامه يوزر تعريف كرد و از اطلاعات يوزر استفاده كنيم حتما بايد از server explore استفاده كرد ؟
خب اين يه مشكل بزرگه فكر نكنم اينطوري باشه
من جواب سئوالم رو نگرفتم دوست من يعني بايد از sqlclient استفاده كنم

Mahmoud.Afrad
شنبه 24 تیر 1391, 10:59 صبح
نه نیازی به sqlclient نیست. شما از پنجره server explorer به دیتابیس خودتون برید و روی جدول مورد نظر راست کلیک کنید و show table data رو انتخاب کن. و اطلاعات رو وارد کن.
این اصلا مشکل نیست که بخواد بزرگ باشه. این که ویژوال استادیو هربار یک کپی از دیتابیس رو در پوشه دیباگ کپی میکنه برای این هست که هر بار که در دیباگ های مختلف برای تست برنامه، داده های بیخودی ای رو وارد کردید ، آخرش عزا نگیرید که این اطلاعات بیخود رو چجوری پاک کنید یا چجوری identity جداول رو ریست کنید. پس اگر میخواهید اطلاعات مورد نظر جزئی از دیتابیسی باشه که به کاربر ارائه میشه باید در محیط طراحی دیتابیس (یعنی همون server explorer) این کار رو انجام بدید.

sayvan
شنبه 24 تیر 1391, 11:48 صبح
ممنونم از توضيحاتتون
يعني من كار با پروژه رو با دستورات لينك تموم كنم
بعد پابيليكش كنم مشكلي نخواهد داشت ؟
و با داده هايي كه در server explorer وارد كردم برنامه رو تست كنم؟