# برنامه نویسی با محصولات مایکروسافت > برنامه نویسی مبتنی بر Microsoft .Net Framework > Setup و Deployment >  attach کردن database در زمان اجرا توسط install shield

## naser2009

سلام دوستان عزیز 
من در نرم افزار install shield به راحتی در زمان uninstall اسکریپ زیر را اجرا می کنم و دیتابیس را detach می کنم.
     go
use master
Exec sp_detach_db 'reminderdb','true'اما می خوام در زمان install هم توسط یک اسکریپ دیگر مانند زیر دیتابیسم را به بانک attach کنم.  go
use master
EXEC sp_attach_db 'ReminderDb', 
'ReminderDb.mdf',
'ReminderDb_log.ldf'چگونه از داخل برنامه setup مسیر دهی درستی برای فایل های mdfو ldf جهت attachشدن داشته باشم؟؟؟
ممنون...

----------


## kitaro

دوست عزير براي اين کار کافيه در قسمت Server Configuration -> SQL Scripts يه اسکريپت جديد بسازين و بعد کد زير رو در برگه Script کپي کنيد: 


use [master]
GO 

CREATE DATABASE TESTDB ON 
( FILENAME = N'*%appfolder%*\DB\DCMDB.mdf' ),
( FILENAME = N'*%appfolder%*\DB\DCMDB_log.ldf' )
 FOR ATTACH
GO

بعد توي برگه Text Replacement يه عنوان جديد بسازين:

Find What: %appfolder%
Replace With: [TARGETDIR]




البته ممکنه اون کد مسير فايل رو براي Attach پيدا نکنه در نتيجه شما مجبوريد راه دوم رو امتحان کنيد که 100% جواب ميده:


use [master]
GO 

CREATE DATABASE TESTDB ON 
( FILENAME = N'*%dbfolder%*\DB\DCMDB.mdf' ),
( FILENAME = N'*%dbfolder%*\DB\DCMDB_log.ldf' )
 FOR ATTACH
GO


در مرحله بعد وارد برگه Text Replacement بشين و يه replacement با مشخصات زير وارد کنيد:

Find What: %dbfolder%
Replace With: [Z_TARGETDIR]


 تابع زير رو در Install Script ايجاد کنيد :

 	export prototype GetTARGETDIR(HWND);

function GetTARGETDIR(hMSI) 
STRING svPropValue,svTemp;
NUMBER nvBuffer; 
begin                    
	svTemp = TARGETDIR;
	StrRemoveLastSlash ( svTemp );	
	MsiSetProperty(hMSI,"Z_TARGETDIR", svTemp);
		nvBuffer = 256;



بعد توي قسمت Property Manager يه مشخصه به اسم Z_TARGETDIR ايجاد کن.

و در نهايت يه Custom Action از نوع New InstallScript بساز و اسم تابع GetTARGETDIR رو بهش بده و Install Exec Sequence رو برابر با <First Action> قرار بده.

تموم شد.
روش دوم سخت تره ولي OK.

----------


## iekrang

سلام، من هر دو راه رو چک کردم ولی خطا میده.

راه دوم رو که امتحان میکنم ، targetdir و StrRemoveLastSlash و MsiSetProperty رو نمیشناسه ! خطای undefined identifier میده.

کسی میدونه دلیلش چیه؟

----------


## احمد سامعی

دوستان کسی اگر به نتیجه رسیده به ما هم بگه من از Installsheild 2010 استفاده می کنم توی توضیحات بالا نفهمیدم دیتابیس کجا قرار بردم منظورم مسیر فیزیکی؟

----------

