PDA

View Full Version : آموزش: آموزش کامل و ساده ایجاد فایل نصب در ویژوال و اینستال شیلد و چنتا سوال رایح



svhasvha
شنبه 11 خرداد 1392, 13:48 عصر
با سلام خدمت دوستان قول داده بودم که این آموزشو بزارم
حالا اومدم که به قولم وفا کنم
فرض میکنیم شما پرروژتون رو کامل کردید و حالا میخواید پروژتون رو قابل حمل کنید یا به عبارتی بتونید رو هر سیستمی نصب کنید با به عبارت دیگه فایل نصبش رو درست کنید
خوب چون هر کدوم از شما دوستای گلم پروژتون متفاوته من سعی میکنم حالت های ممکن رو در نظر بگیرم
1. پروژتون C#‎ 2008 (البته تفاوتی با 2010 نداره)
2. پروژتون به بانک SQL2008 وصله (البته ورژنش باز تفاوتی نداره)
3. تو پروژتون از کریستال ریپورت برای گزارش گیری استفاده کردید
4. میخواید با خود محیط ویژوال کار کنید
5. میخواهید با اینستال شیلد 2010 کار کنید(البته ورژنش زیاد تفاوتی نداره)
حالا فرض میکنیم شما چن تا سوال هم دارید
1. چه فایل ها برنامه های باید با فایل ست آپ نصب کنم رو سیستم مقصد
2. چیکار کنم که بعد نصب نرم افزار در خواست اتچ کردن نده
3. چطوری فرم های ویزارد هنگام نصب برنامه رو به صورت دل خواه تنظیم کنم
خوب قبل این که شروع کنیم بهتون بگم که روش های که و اسه انجام تمام این آیتم ها وجود داره زیاده و خیلی جا ها سلیقه ایه که شاید به خاطر قدرت مانور و انعطاف زیاد C#‎ و SQL و iestallshield و کلا نرم افزار های موجوده
من سعی میکنم یه روش اصولی و خیلی راحت و به زبان ساده بگم, بی ادبی به خدمت دوستان گلم نشه همه مهندس وسر ور منید ولی اینطوری فکر کنیم که همه قرار نیست همه چیز رو بدونن و اینکه ممکنه من خیلیا تازه وارد یا اینکه نه همه چی دون ولی تا حالا سرو کارشون به یه قسمت از این مطالب نیفتاده باشه این اشکالی نداره ما فرض میکنیم همه مث من تازه کارن
پس یا علی
توجه : هر قسمت از مطالب رو شما در پروژتون نداشتید میتونید از اون قسمت صرفه نظر کنید
خوب اول بریم سراغ.....
سراغ......
اها سوالات وسوال 2
ببینید مشکل اینجاست که شما نمیخواید به صورت دستی مجبور بشید هربار که نرم افزار رو نصب کنید واسش توضیح بدید که چطوری و بره کجا و به چه بانکی وصل بشه شما بلدید ولی ممکنه کار بر این چزا رو بلد نباشه و به همبن خاطر قید استفاده از نرم افزار شما رو بزنه!!!! به همین راحتی
بیاید فکر کنیم ....
راه حل
1. خودمون بریم و هربار اتصال بانک رو انجام بدیم!!! ؟؟؟؟

شوخی قشنگی بود
2. مگه ما برنامه نویس نیستیم ؟ خوب برنامه رو تنظیم میکنیم که این کارو برامون انجام بده!!
بلد نیستیم؟
مهم نیست بلدی نمی خواد سو استفاده میکنیم!!!!
SQL رو باز کنید بانکتون رو دیتچ کنید حالا دوباره اتیچ کنید ولی آخر کار کلید OK رو نزنید
104966
بجای OK ایکن Script رو بزنید اینجوری کد اتیچ براتون نمایان میشه!!!!
اینو بهش میگن سو استفاده!!!!
کد به صورت زیره البته با یزه تفاوت با مال شما اونم قسمت آدرس فایل بانکه که به رنگ قرمزه



USE [master]

GO

CREATE DATABASE [FOROSHGHAH] ON

( FILENAME = N'D:\New folder\proje\SAEID\SAEID\bin\Debug\DB\foroshghah.m df' ),

( FILENAME = N'D:\New folder\proje\SAEID\SAEID\bin\Debug\DB\foroshghah_l og.ldf' )

FOR ATTACH

GO


به همین زیبایی و قسنگی !!!
خوب حالا اینو چیکارش کینم
دوتا سوال
1. آدرس محل بانک فیزیکی یعنی این آدرس مال سیستم منه نه کاربر!!!
2. حالا کجا استفادش کنیم؟؟؟
خوب اول سوال دوم
ببینید منطقی فکر کنید!! بهترین جا کجاست؟؟؟
من میگم اولین فرمی که یعد از نصب نرم افزار رو سیستم کاربر اجرا میشه وقبل از هرکد اتصالی به بانک!!
موافقید؟
یه تشکر بزنید
خوب این فرم رو که گفتیم باز کنید و برید قسمت کد نویسی
من از فرم لوگین پروژم استفاده میکنم
104967
تو قسمت کد نویسی یه متد اتصال به بانک مینویسم
روش اتصال به عهده خودتون هر جور که تو پروژه تون وصل میشید وصل شید
من این کارو کردم


//متغیر سراسری
SqlConnection con = new SqlConnection();

و متد رو اینطوری تعریف کردم


//اتصال بانک
public void Return_DB()
{
try
{
// روش اتصال به شما بستگی داره مهم فقط رشته دستوره
con.ConnectionString = "Integrated Security = True;" +"Initial Catalog = Master;";
}
catch
{
MessageBox.Show("اتصال به بان موفق نبود");
}
}


نکته :آخر رشته من از مسترر استفاده کردم ببینید ما که نمیدونیم چه بانک های به SQL کاربر اتیچ هستند که با استفاده از اون بانک وصل بشیم یا اینجوری بگم که برای اتصال به SQL باید از یک بانک استفاده کنیم!!!! بانک مستر به صورت پیش فرض روی SQL هست پس ما باز سوءاستفاده میکنیم و از امکانات خود SQL کمک میگیریم
خوب حالا اتصال به بانک رو امتحان کردیم یه متد دیگه لازم داریم که بانک مونو به SQLاتیچ کنیم
یعنی استفاده از همون کدی که از خود SQLکش رفتیم!!!

//attach بانک
public void Check_Copy()
{
//بدست آوردن مسیری که فابل اجرایی از اونجا داره اجرا میشه
string path = Application.StartupPath;
//********************************اتصال یه بانک***********************
SqlCommand com = new SqlCommand();
com.Connection = con;
com.CommandText = @"CREATE DATABASE [FOROSHGHAH] ON ( FILENAME = N'" + path + "\\DB\\foroshghah.mdf' ),( FILENAME = N'" + path + "\\DB\\foroshghah_log.ldf' ) FOR ATTACH";

con.Open();
com.ExecuteNonQuery();
con.Close();
}
سوال اول یادتونه؟ راجب مسیر فیزیکی؟
من مشکل رو این جوری حل کردم
با استفاده از خط اول کد مسیری که فایل EXEنرم افزار از اونجا اجرا میشه رو پیدا کردم وریختم تو یه متغیر رشته ای به نام PATH
درست ؟ خوب کار بعدی این بود که بانک اطلاعاتی رو از SQL دیتچ کردم و اونو جابه جا کردم
کجا؟؟
تو شاخه پروژه به اسم bin رفتم دوبا خاتونو دیدم..... نه ببخشدی بعد Debug
یعنی یه همچین چیزی
D:\New folder\proje\SAEID\SAEID\bin\Debug
اونجا یه فولدر به اسم DB ساختم و فایل بانک اطلاعاتی رو ریختم تو اون!!!
خوب حالا من قسمت اول آدرس بانکم رو دارم یعنی
D:\New folder\proje\SAEID\SAEID\bin\Debug
یا هر جایی که کاربر برنامه رو نصب کرده
کجاست؟ ذخیره شده تو متغیر ptach این مسیر هربار که نرم افزار اجرا بشه و تو هر سیستمی تو این متغیر ذخیره میشه
حالا کافیه من به آخر این آدرس \\DBرو اضافه کنم یعنی اینطوری
path + "\\DB
وبه آخر این هم اسم بانکم رو یعنی
path + "\\DB\\foroshghah.mdf
و
path + "\\DB\\foroshghah_log.ldf'
به همین راحتی آدرس دقیق خونشونو ... ببخشد محل ذخیزه رو پیدا کردیم!!!!
پس فهمیدید تو متد دوم من چرا وچطور کد SQL رو تغییر دادم؟؟
حالا برید تو قسمت متد لود فرم و قبل از هر کدی این کد رو وارد کنید

try
{
Return_DB();
Check_Copy();
}
catch
{
}
دلیل استفاده از try هم اینه که قرار نیست هر بار که نرم افزار اجرا میشه بانک اتچ بشه فقط بار اول لازمه
یا اینطوری بگم
هربار که نرم افزار اجرا میشه چک میکنه که بانک وصل هست اگه بود که هیچ کاری نکن اگه نبود که وصلش کن!!
خوب این از مشکل اتیچ تا من قسمت بعد رو آماده میکنم وشما هم این قسمت رو چک میکنید
تشکر یادتون نره
نه به این خاطر که از من تشکر کرده باشید نه مولا علی میگه زکات علم آموزش آن است این و ظیفس
فقط به خاطر اینکه بدونم مطالب مفید بوده که ادامه بدم
والا نه من بی کارم نه دور از جون شما!!!!

esafb52
شنبه 11 خرداد 1392, 16:50 عصر
سلام واقعا ممنونم
شما اگه کلمه اتچ رو سرچ کنید اونوقت میبینید که چه خبره من خودم رو این موضوع گیر داشتم و هرچی سرچ هم کردم به نتیجه درستی نرسیدم بعضی از اساتید و دوستان هم روش هایی رو پیشنهاد میدادند که باز کامل جواب نمیداد جدا من که قسمت اتچ رو برای بار اول دیدم اینقد خوب توضیح داده شده
باز مجددا ممنون از آموزش خوبتون

negar.rafie
شنبه 11 خرداد 1392, 18:37 عصر
از اموزشتون ممنون من خیلی دونبال این مطلب هستم که امیدوارم توی این تاپیک یاد بگیرم
ولی برای این کار دو مشکل وجود داره که شما هم مثل اینکه قرار نیست به اون دو مشکل اصلی توجه کنید
مشکل اول نصب sql:ببینید فرض کنید ما از sql server 2008 برای ایجاد و ساخت دیتابیس خود استفاده کردیم حالا تو سیستم کاربر باید چی نصب باشه که بانک بهش اتچ بشه ؟ایا نصب sql express کافی هستش و با نصب sql express بانکی که با sql server 2008 ساختیم بهش اتچ میشه؟
مشکل دوم:باید از چه کانکشن استرینگی استفاده کنیم که در همه سیستم ها کار کند؟

esafb52
شنبه 11 خرداد 1392, 20:57 عصر
با سلام
سوال بستگی به شما داره یعنی اگه نیازتون با ورژن اکسپرس هم برطرف میشه پس نیاز به نصب ....نیست
2-تا جایی که من تحقیق کردم
:
SqlConnection con = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=" + Application.StartupPath + "\\db.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True");
و همین کانکشن استرینگ با دیتا دیرکتوری