PDA

View Full Version : سوال: برقراری ارتباط c# با sql با برنامه نویسی 3 لایه



scarfce
پنج شنبه 19 اردیبهشت 1392, 20:00 عصر
درود و سلام خدمت بچه های این فروم
من کلا تازه واردم!
یعنی هم در برنامه نویسی مبتدی هستم هم تازه توی این فروم ثبت نام کردم
سعی کردم طبق قوانین تاپیک بزنم
اشکالی توی کار بود به بزرگی خودتون ببخشید
حقیقتش من یه پروژه میخوام آماده کنم که حتما باید 3 لایه نوشته بشه
یه جدول توی sql ساختم
و توی c# هم با کلاس برنامش رو نوشتم ولی جواب نمیده رو datagrid
خواهشی که دارم واسه نمایش یا همون select مجموعه دستوراتی که باید توی sql کلاس و فرم نوشته بشه رو به روش مبتدی :لبخند: واسه توضیح بدید یا لینک
البته قصد نوشتن درج و حذف و آپدیت رو هم دارم..ولی خب توی همین گیر کردم
با اجازتون تا اتمام پروژم سوالامو توی همین تاپیک مطرح می کنم
مرسی:قلب:

uniqueboy_ara
جمعه 20 اردیبهشت 1392, 00:26 صبح
سلام دوست عزیز
خوش اومدید
شما که تازه دارید شروع می کنید بهتره که متد های روز رو هم یاد بگیرید، که شامل LINQ و Entity Framework میشه
اینجا یه آموزش ساده و کاربردی از این روش آماده کردم ( به صورت فیلم ) که 4عمل اصلی رو در Entity Framework و توسط LINQ آموزش دادم => پروژه ساخت دفترچه تلفن با استفاده از EF و LINQ (http://barnamenevis.org/showthread.php?347385-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D8%B3%D8%A7%D8%AE%D8%AA-%D8%AF%D9%81%D8%AA%D8%B1%DA%86%D9%87-%D8%AA%D9%84%D9%81%D9%86-%D8%A8%D8%A7-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%A7%D8%B2-EF-%D9%88-LINQ)

scarfce
جمعه 20 اردیبهشت 1392, 11:33 صبح
مرسی داداش
ولی من یه کم گیج شدم
ببین اول یه فایل stored proce.. درست کردم توی sql و این رو واسه select نوشتم

create proc bank
as
begin
select *from bank
end

و ذخیرش کردم توی که پیش فرض توی پوشه project ذخیره شد
دیگه هیچ کار دیگه ای نکردم توی sql

حالا توی C#
2 تا کلاس درست کردم
توی class1
public DataTable select()
{
Class2 d = new Class2();
SqlParameter[] p = new SqlParameter[0];
return d.select("bank", p);



}

و توی class2


public DataTable select(string spname, SqlParameter[] p)
{
SqlConnection con = new SqlConnection("data source=.;initial catalog=bank;integrated security=true");

SqlDataAdapter da = new SqlDataAdapter(spname, con);
da.SelectCommand.CommandType = CommandType.StoredProcedure;
da.SelectCommand.Parameters.AddRange(p);
DataTable dt = new DataTable();
da.Fill(dt);
return dt;
}

این هم توی فرم
Class1 b = new Class1();
dataGridView1.DataSource = b.select();

ولی خب جواب نمیده
من فکر می کنم توی ارتباط با sql یه جای کار اشتباس
شرمنده دیگه من مبتدیم:گریه:

mohammad kafiyan
جمعه 20 اردیبهشت 1392, 12:22 عصر
دوست عزیز یک بار از خود stored procduer اجرا بگیر ببین select خروجی بر می گرونه
در ضمن این خط کد هم نیاز نیست


da.SelectCommand.Parameters.AddRange(p);

چون شما پارامتری تعیین نکردی در storedprocduer

scarfce
جمعه 20 اردیبهشت 1392, 13:06 عصر
ایول آقا درست شد
ایراد از stored procduer بود
چون هم اسم دیتابیس هم اسم جدول رو bank گذاشته بودم
توی نوشتن stored procduer به جای اینکه جدول رو آدرس بدم دیتابیس رو آدرس داده بودم:ناراحت:
میرم ادامش رو بنویسیم ایرادی بود (که حتما هست :لبخند:) مزاحم میشم
دست گلتون درد نکنه :قلب:

scarfce
شنبه 21 اردیبهشت 1392, 22:39 عصر
درود بر همگی
select و insert رو نوشتم و کامل جواب داد
حالا می خوام ویرایش و حذف رو هم بنویسم
چون 3 لایه باید بنویسم گیج شدم که چی توی stored proce... و چی توی کلاسام و چی توی دکمه فرمم بنویسم
واسه حذف قصد اینه توی datagrid view توی فرم هر ردیفی رو انتخاب کردم و یه دکمه زدم ، اون ردیف حذف بشه
و واسه ویرایش هم بر اساس یه فیلد مثلا "نام" سرچ کنم توی یه textbox و بعد که پیداش کرد توی data grid
بعد فقط 2 تا فیلدش رو قصد ویرایشش رو دارم
یکی از فیلد ها متن مورد نظر رو توی textbox میذارم و دکمه ویرایش رو می زنم
اون یکی رو هم combobox رو یکی از آیتم هاش رو انتخاب می کنم و دکمه ویرایش دوباره
شرمنده زیاد شد
ممنون میشم دقیق بگید چکار کنم
حالا اول هم آپدیت رو گفتید لطف می کنید تا یکی یکی برم جلو
واقعا مرسی

mousa1992
یک شنبه 22 اردیبهشت 1392, 00:18 صبح
سلام
خوش اومدی


چون 3 لایه باید بنویسم گیج شدم که چی توی stored proce... و چی توی کلاسام و چی توی دکمه فرمم بنویسم
طبق کلاسهایی که خودتون نوشتین جوابتونو میدم

این بار توی stored procedure مربوط به delete و update باید پارامتر هایی رو در نظر بگیرید - که هنگام فراخوانی پروسیجر پارامتر ها رو بهش ارسال میکنید و عملیات مورد نظرتون رو انجام میده ( مثلا برای حذف فقط به فیلد کلید اصلی نیاز دارید - همون فیلدی که وجه تمایز رکوردهاتون هست و ...)

خب توی کلاس دومتون دو متد ایجاد میکنید برای اپدیت و حذف ( فک میکنم خودتون نحوه ی اپدیت کردن و حذف کردن رو بلد باشید )
و توی کلاس اول هم متدهای نوشته شده رو در کلاس دوم فراخوانی میکنید و از فرمتون متدهای نوشته شده در کلاس 1 رو فراخوانی مینید و پارامترهای مناسب رو از دیتا گرید و یا تکس باکس ها ارسال میکنید

فقط خواستم که کمکتون کنم توی اینا گیج نشین امیدوارم بدتر نشده باشه :لبخند:

موفق باشی دوست خوبم

scarfce
سه شنبه 24 اردیبهشت 1392, 07:40 صبح
مرسی داداش
سرچ رو نوشتم
آپدیت و حذف رو هم روش کار می کنم
سوال آخر
اگر خواستم برنامه رو setup کنم
میشه بدون تغییر در کانکشن کاری کنم که هر موقع برنامه نصب بشه عمل attach دیتابیس خود صورت بگیره؟
یه سرچ زدم گفته بود sqlexpres نصب میشه و attach خودش صورت میگیره

scarfce
سه شنبه 24 اردیبهشت 1392, 20:34 عصر
delete رو نوشتم و جواب داد
فقط توی آبدیت گیر کردم

توی sql این رو نوشتم

create proc up @id int,@esm nvarchar(50)
as
begin
update esme jadval set esm=@esm where id=@id
end



توی کلاس ۱ هم
public void up()
{
Class2 cl = new Class2();
SqlParameter[] p = new SqlParameter[1];
p[0] = new SqlParameter("@id", id);
cl.Docommand("esme stored proc..", p);
}

فقط نمیدونم با چه کدی توی دکمه update صداش بزنم و آپدیت کنم

اگر هم توی sql یا کلاسام اشتباه نوشتم بگید بی زحمت
عجله ایه
پست بالا رو هم جواب ندادید اشکال نداره ولی الان گیر این آپدیتم

mousa1992
چهارشنبه 25 اردیبهشت 1392, 00:10 صبح
سلام
پروسیجری که نوشتی مشکل نداره و اوکیه
توی کلاس 1 متدی رو برای اپدیت نوشتین که دوتا مشکل داره:
1- پارامترهایی که به پروسیجر ارسال میکنید یکی هست و فقط ایدی رو میفرستید ! شما باید هم ایدی و هم اسم رو بفرستی و عمل اپدیت رو انجام بدی ( اون پارامتری که برای پروسیجر تعریف کردی پس از کجا میخواد مقدار بگیره :بامزه: )
2 - دو هم شبیه یک هست :D شما توی کلاس یک برای متد UP باید دوتا ارگومان تعریف کنید یکی برای گرفتن فیلد id و یکی هم برای فیلد esm که بعد اینارو بفرستین به پروسیجر دیگه


میشه بدون تغییر در کانکشن کاری کنم که هر موقع برنامه نصب بشه عمل attach دیتابیس خود صورت بگیره؟
دیتابیستون از چه نوعی هست ؟ ایا با express ساختینش ؟ اگه express هست که مشکلی نداره و فایل های دیتابیس رو هنگام ساخت نصب به پروژه نصب اضافه میکنید و کانکشنی بدین صورت بهش میدین

Connection = new SqlConnection(@".\SQLEXPRESS;AttachDbFilename=|DataDirectory|\PPJ. mdf;Integrated Security=True;User Instance=True");


|DataDirectory| محل برنامه رو برمیگردونه

موفق باشید

scarfce
چهارشنبه 25 اردیبهشت 1392, 12:06 عصر
وای عجب سوتی دادم =))
آپدیت هم درست شد آقا
خیلی ممنون
این دیتابیس که گفتید
موقع ساختن دیتابیس نوعش رو انتخاب باید بکنیم یا ورژن sql باید اکسپرس باشه؟

bensaeed
پنج شنبه 24 مرداد 1392, 11:26 صبح
قبول باشه.:لبخندساده: