PDA

View Full Version : مشکل در وصل شدن به دیتابیس بعد از Setup برنامه



mohammad87
چهارشنبه 21 فروردین 1387, 22:50 عصر
سلام حرفه ای ها
آقا توی پست قبلی من مشکلم حل شد ... خیلی حال دادین ....
حالا یک مشکلی که دارم اینکه : بعد از Setup برنامه اگه دیتا بیس توی همون جایی که برنامه نصب شده باشه نمی تونه به برنامه وصل بشه ... حتما باید دیتا بیسو همون جایی که برنامه رو نوشتم ببرم تا بتونه تشخیص بده ... حالا اگه شما میدونید که تکنیکی هست که همون جایی که دیتابیس و برنامه نصب میشه بتونه برنامه با دیتا بیس ارتباط برقرار کنه بگید...آیا توی Connection String باید کاری کنم؟ که دیگه احتیاجی به بردن دیتابیس به مکان خاصی نباشه ؟

gdevnb
چهارشنبه 21 فروردین 1387, 23:02 عصر
Application.StartupPath + @"\data.mdb"

mohammad87
چهارشنبه 21 فروردین 1387, 23:11 عصر
nدوست عزیز اینو کجا باید بزارم یکم بیشتر توضیح بده

gdevnb
چهارشنبه 21 فروردین 1387, 23:30 عصر
مسیر جاری برنامه هستش. یعنی جایی که برنامه شما اجرا میشه.
بانک اطلاعاتیتون که access هستش رو کنار فایل exe بزار و مسیر بانک رو داخل ConnectionString هستش رو به کد بالا تغییر بده

.

strCon="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
Application.StartupPath + @"\data.mdb";

mohammad87
چهارشنبه 21 فروردین 1387, 23:36 عصر
مسیر من اینه چی رو باید تغییر بدم

Data Source=.\SQLEXPRESS;AttachDbFilename=C:\WindowsApp lication8\WindowsApplication8\Database1.mdf;Integr ated Security=True;User Instance=True

gdevnb
چهارشنبه 21 فروردین 1387, 23:49 عصر
مسیر من اینه چی رو باید تغییر بدم

Data Source=.\SQLEXPRESS;AttachDbFilename=C:\WindowsApp lication8\WindowsApplication8\Database1.mdf;Integr ated Security=True;User Instance=True
دو ست عزیز شما بانک اطلاعاتیتون SqlServer هست
برای Attach کردنش از کد زیر استفاده کن
اول بانکتو (هر دو فایل) بزار تو پوشه db کنار فایل exe




string dbname = "Database1.mdf";
string commandtext = @"EXECUTE sp_attach_db @dbname = 'Database1'," +
@"@filename1 = '" + Application.StartupPath + "\\db\\Database1.mdf'," +
@"@filename2 = '" + Application.StartupPath + "\\db\\Database1.ldf',";
//connectionstr="Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True";
SqlConnection con = new SqlConnection(connectionstr);
SqlCommand com = new SqlCommand(commandtext, con);
con.Open();
com.ExecuteNonQuery();
con.Close();

gdevnb
چهارشنبه 21 فروردین 1387, 23:54 عصر
بعد از attach کردن رشته اتصالتون میشه

connectionstr="Data Source=.\sqlexpress;Initial Catalog=Database1;
Integrated Security=True";

mohammad87
جمعه 23 فروردین 1387, 20:32 عصر
آقا ما که نفهمیدیم چه ار باید بکنیم ... فکر می کنم راه حل ساده تری هم وجود داشته باشه ؟ کسی نمی دونه؟

choobin84
جمعه 23 فروردین 1387, 20:49 عصر
آقا ما که نفهمیدیم چه ار باید بکنیم ... فکر می کنم راه حل ساده تری هم وجود داشته باشه ؟ کسی نمی دونه؟

چون از بانک sql استفاده می کنید باید engin اونو نصب کرده باشید. نصب به صورت دستی یا با installshield.
بانکتون هم همونطوری که گفته اند باید attach بشه.
connectionstring رو هم به شکل زیر تغییر بدید


connectionstring="server=(local);trusted_connection=yes;database=you rdatabasename;"

mohammad87
جمعه 23 فروردین 1387, 21:52 عصر
من اومدم به connection String این کد رو اضافه کردم :

Data Source=.\SQLEXPRESS;AttachDbFilename=Application.S tartupPath\\Database1.mdf;Integrated Security=True;User Instance=True
ولی بازم ERROR می ده

gdevnb
شنبه 24 فروردین 1387, 00:07 صبح
به این سوالها جواب بده
1-آیا در سیستم مقصد SqlServer نصبه؟
2-آیا بانک شما به سرور اسکیوال Attach شده؟

در صورت مثبت بودن هر دو جواب از ConnectonString زیر استفاده کن.

connectionstr="Data Source=.\sqlexpress;Initial Catalog=نام دیتابیس مورد نظرتون;Integrated Security=True";

mohammad87
شنبه 24 فروردین 1387, 17:29 عصر
من دیتا بیس خودمو توی سی شارپ ساختم ... وقتی ConnectionString من مثل زیر هست مشکلی نداره
Data Source=.\SQLEXPRESS;AttachDbFilename=C:\WindowsApp lication8\WindowsApplication8\Database1.mdf;Integr ated Security=True;User Instance=True
حالا وقتی میام توی AttachDbFilename تغییر می دم مشکل پیش میاد ... sql server نصبه ,مشکل توی همون attach شدنه ... آخه من می خوام همو جایی که نصب میشه دیتا بیس رو از همون جا بخونه ... نمی دونید توی propreties کانکتیون اگه تغییراتی بدم بشه؟

vpourshab
یک شنبه 25 فروردین 1387, 00:45 صبح
برو توی فایل app.config و connectionString و به صورت زیر تغییر بده


Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True
همچنین درون برنامه هر جا داری اینجور بنویس



Connectionstring = @"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\Database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

و دیتا بیس رو درس جایی که exe برنامه ات اونجاست قرار بده و اجرا کن درست میشه:چشمک:

razavi_university
یک شنبه 25 فروردین 1387, 15:21 عصر
ConnectionStringی که شما گذاشتید مربوط به Sqlexpress هست در صورتی که دیتابیس ما در خود SQL2005 باشد چه کنیم؟
(به دلایلی نمیتونم از ‌SQLExpress استفاده کنم)

mohammad87
یک شنبه 25 فروردین 1387, 19:37 عصر
ای ول vpourshab (http://barnamenevis.org/forum/member.php?u=39203) بابا خیلی باحالی درست شد ....
بچه ها ممنون .

gdevnb
دوشنبه 26 فروردین 1387, 02:26 صبح
ConnectionStringی که شما گذاشتید مربوط به Sqlexpress هست در صورتی که دیتابیس ما در خود SQL2005 باشد چه کنیم؟
(به دلایلی نمیتونم از ‌SQLExpress استفاده کنم)



با سلام
در حین نصب Sql2005 به جای local یه اینستنس با نام SqlExpress ایجاد میکنیم.

razavi_university
دوشنبه 26 فروردین 1387, 08:01 صبح
در حین نصب Sql2005 به جای local یه اینستنس با نام SqlExpress ایجاد میکنیم.

متوجه نشدم میشه بیشتر توضیح بدی؟
منظورت از حین نصب زمان نصب برنامه خودمونه؟

gdevnb
دوشنبه 26 فروردین 1387, 08:46 صبح
در صورتی که Sql Server روی سیستم نصب باشه میتونه بصورت local نصب بشه یا همون Default Instanse یا اینکه شما بصورت یه Instanse با نام دلخواه نصبش کنید که بعد میتونید به صورت زیر بهش دسترسی داشته باشید

(local)\InstanseName
در واقع حتی زمان نصب برنامه خومون اگه مایل باشیم حتی اگه Sql Server هم نصب باشه می تونیم اونو به صورت یه Instanse دیگه نصب کنیم(با نام دلخواه)(البته تعدادشون محدوده دقیقاً نمی دونم رو هر سیستم حداکثر چند تا Instanse میتونه نصب باشه) که دیتاهای کاملاً مستقل از حالت Default عمل میکنه. در واقع شما یه سرویس مجزای دیگه از Sqlserver دارید.

razavi_university
دوشنبه 26 فروردین 1387, 12:19 عصر
خوب من الان دیتابیسم نصبه
کل اطلاعات و Sp و ... روش هست
الان که می خوام برنامه نصب واسش بسازم چه کنم؟

programmable
دوشنبه 26 فروردین 1387, 15:05 عصر
دو ست عزیز شما بانک اطلاعاتیتون SqlServer هست
برای Attach کردنش از کد زیر استفاده کن
اول بانکتو (هر دو فایل) بزار تو پوشه db کنار فایل exe




string dbname = "Database1.mdf";

string commandtext = @"EXECUTE sp_attach_db @dbname = 'Database1'," +
@"@filename1 = '" + Application.StartupPath + "\\db\\Database1.mdf'," +
@"@filename2 = '" + Application.StartupPath + "\\db\\Database1.ldf',";
//connectionstr="Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True";
SqlConnection con = new SqlConnection(connectionstr);
SqlCommand com = new SqlCommand(commandtext, con);
con.Open();
com.ExecuteNonQuery();
con.Close();



من برنامه ام از یه دیتا بیس استفاده میکنه که باید به SQL server اتچ کنمش . این کار رو میخوام در یک فایل exe قرار بدم که کاربر با احرای اون این عمل رو انجام بده و کار نصب برنامه راحت باشه ! با استفاده از کدی که شما گذاشتید این کار امکان پذیر نیست لطفا بگید چکار کنم؟

mohammad87
دوشنبه 26 فروردین 1387, 21:27 عصر
من برنامه ام از یه دیتا بیس استفاده میکنه که باید به SQL server اتچ کنمش . این کار رو میخوام در یک فایل exe قرار بدم که کاربر با احرای اون این عمل رو انجام بده و کار نصب برنامه راحت باشه ! با استفاده از کدی که شما گذاشتید این کار امکان پذیر نیست لطفا بگید چکار کنم؟

منظور شما اینکه چطوری دیتابیس رو همراه با ستاپ کردن برنامه اجرا بشه و نصب بشه یا اینکه هرجا برنامه اجرایی تون هست دیتابیس و تشخیص بده و وصل بشه ؟
برای اولی می تونی از نرم افزار Installware استفاده کنی ولی برای دومی از کد زیر توی Connection string خودت استفاده کنی :
Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\database1.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True

gdevnb
دوشنبه 26 فروردین 1387, 22:40 عصر
خوب من الان دیتابیسم نصبه
کل اطلاعات و Sp و ... روش هست
الان که می خوام برنامه نصب واسش بسازم چه کنم؟
به نظر من بهترین روش اینه که فایلها در سیستم مقصد Attach بشه اونم از طریق کدی که خودمون نوشتیم.در جریان نصب برنامه , در پایان نصب این برنامه رو اجرا کنه(از طریق برنامه ستاپ) تا دیتابیس رو attach کنه.



من برنامه ام از یه دیتا بیس استفاده میکنه که باید به SQL server اتچ کنمش . این کار رو میخوام در یک فایل exe قرار بدم که کاربر با احرای اون این عمل رو انجام بده و کار نصب برنامه راحت باشه ! با استفاده از کدی که شما گذاشتید این کار امکان پذیر نیست لطفا بگید چکار کنم؟

کد رو ضمیمه کردم. اونو بررسی کنید مشکلتون حل میشه.
در ضمن یه برنامه اجرایی رو هم بزودی می ذارم که این کار رو برای شما انجام می ده.
روش استفاده:
فایلهای بانک اطلاعاتی رو درکنار فایل exe در پوشه db قرار بدید.
فایل DbCreator.exe.config رو باز کرده و بصورت زیر تنظیم کنید.



<setting name="dbname" serializeAs="String">
<value>Hesabdar</value>
</setting>
<setting name="file1" serializeAs="String">
<value>Hesabdar.mdf</value>
</setting>
<setting name="file2" serializeAs="String">
<value>Hesabdar_log.ldf</value>
</setting>
<setting name="connectionstr" serializeAs="String">
<value>Data Source=.\sqlexpress;Initial Catalog=master;Integrated Security=True</value>
</setting>
در مثال بالا فرض شده نام بانک شما Hesabdar نام فایل mdf شما Hesabdar.mdf و نام فایل ldf شما Hesabdar_log.ldf می باشد.
در صورتی که ازتعداد فایلهای بیشتری(ndf) استفاده میکنید سورس رو دستکاری کنید

programmable
جمعه 30 فروردین 1387, 13:42 عصر
ممنون از پاسختون
ولی اینکه ما کانکشن استرینگ رو به این صورت در پوشه برنامه در دسترس داشته باشیم آیا از نظر امنیتی مشکلی نداره؟

gdevnb
شنبه 31 فروردین 1387, 01:00 صبح
این فقط یه مثال ساده برای این کار هستش.در ضمن زمانی که شما قصد ایجاد بانک اطلاعاتی از طریق پروژه ستاپ رو داشته باشید لزومی به کپی کردن این فایل و برنامه مربوطه در مکان نصب نیست. واصلاً ایجاد بانک جزئی از ستاپ میشه که فقط لازمه دیتابیس ما کپی بشه و برنامه ای که از این دیتابیس استفاده میکنه. نه برنامه ای که بانک اطلاعاتی رو attach میکنه.