2011-04-11 18 views
5

मेरे पास Wix का उपयोग करके एक इंस्टॉलर बनाया गया है। मैं उस स्थान को निर्दिष्ट करने में सक्षम होना चाहता हूं जहां SQL सर्वर स्थापित है। एक समाधान जिसे मैं सोच सकता हूं कि CreateDatabase स्क्रिप्ट में प्लेसहोल्डर डालना है और रन टाइम में प्लेसहोल्डर को उस वास्तविक पथ के साथ प्रतिस्थापित करें जो उपयोगकर्ता निर्दिष्ट है।विक्स: किसी निर्दिष्ट स्थान पर एक SQL सर्वर डेटाबेस बनाएँ

मुझे आश्चर्य है कि ऐसा करने का कोई बेहतर तरीका है या नहीं? क्या विक्स कुछ भी प्रदान करता है जिसका मैं उपयोग कर सकता हूं?

धन्यवाद,

+1

मैं एक गतिशील एसक्यूएल का उपयोग करके इस समस्या को हल करने का अंत करता हूं। समाधान की तलाश में किसी के लिए, कृपया निम्नलिखित प्रश्न के लिए स्वीकृत उत्तर की जांच करें: http://stackoverflow.com/questions/5626850/sql-server-use-parameter-in-create- डेटाबेस – sean717

उत्तर

1

मैं एक गतिशील एसक्यूएल का उपयोग करके इस समस्या को हल करने का अंत करता हूं। समाधान की तलाश में किसी को भी के लिए, कृपया निम्नलिखित प्रश्न के लिए स्वीकार किए जाते हैं जवाब की जाँच करें:

SQL Server: use parameter in CREATE DATABASE

5

आप मानक WiX SQL extension का लाभ ले सकते। उदाहरण के लिए, SqlString तत्व इंस्टॉल समय पर निष्पादित करने के लिए SQL क्वेरी निर्दिष्ट करने का विकल्प प्रदान करता है। SqlDatabase तत्व SQL डेटाबेस बनाने के लिए आउट ऑफ़ द बॉक्स विकल्प देता है। दोनों क्रमश: @SQL और @Server विशेषताओं के लिए Windows इंस्टालर गुण स्वीकार करते हैं। इसका मतलब है कि आप उपयोगकर्ता इनपुट प्राप्त कर सकते हैं, इसे संपत्ति में सहेज सकते हैं और एसक्यूएल तत्वों में उस संपत्ति का उपयोग कर सकते हैं।

0

आप नहीं WiX से मुक्त करने के लिए प्राप्त कर सकते हैं।

एसक्लस्ट्रिंग का उपयोग करके, कुछ पैरामीटर और जैसा कि आपने CREATE डेटाबेस का प्रत्यक्ष उपयोग देखा है। आप की आवश्यकता होगी:

  • DB_SERVER
  • DB_INSTANCE
  • DB_PORT
  • DB_DATA_FOLDER
  • DB_LOG_FOLDER

आप एसक्यूएल प्रमाणन आप निश्चित रूप से होगा उपयोग करने के लिए उम्मीद कर रहे हैं, तो भी करने की जरूरत है डीबी_यूएसईआर/डीबी_PASS

में पास करें मापदंडों को सत्यापित करने के लिए अपने स्वयं के कस्टम कार्यों को लिखना।

  • क्या स्थानीय मशीन पर सर्वर/इंस्टेंस मौजूद है? जबकि आप हमेशा एक SQL सर्वर से दूरस्थ रूप से कनेक्ट हो सकते हैं और किसी दिए गए ड्राइव पर फ़ाइलों को स्थापित करने के लिए कह सकते हैं, तो यह उन ड्राइवों के बारे में कुछ भी पहले से मान्य करना कठिन बनाता है।
  • दिए गए सर्वर/इंस्टेंस/पोर्ट और क्रेडेंशियल्स का उपयोग करके आप एसक्यूएल सर्वर मास्टर डीबी से कनेक्ट कर सकते हैं, आप डीबी को अग्रिम में बनाने की अनुमति भी देख सकते हैं। आप पोर्ट का उपयोग न करने से दूर हो सकते हैं लेकिन कुछ डीबीए अभी भी अस्पष्टता के माध्यम से सुरक्षा के लिए जाते हैं।
  • क्या आपको वैध डेटा/लॉग फ़ोल्डर्स दिए गए थे। वास्तव में मौजूद ड्राइव के लिए रूट पथ।
  • डेटा/लॉग फ़ोल्डर ड्राइव पर पर्याप्त स्थान की पुष्टि करना भी एक अच्छा विचार है। मैंने बहुत सारे ग्राहक में भाग लिया है जो छोटे सी पर अपने डेटा फाइलों की जांच नहीं करते हैं और एक विशाल विशाल डी: डेटा ड्राइव के साथ ड्राइव करते हैं। मैं आमतौर पर एक संयोजन न्यूनतम मुक्त स्थान के साथ ही कम से कम मुक्त प्रतिशत (जैसे कम से कम 25% डिस्क पर मुक्त अंतरिक्ष)
0

यान के जवाब में विस्तार करते हुए, वहाँ एक बहुत ही सरल वाक्य रचना करता है, तो आप Sql एक्सटेंशन का उपयोग है करते हैं - आप की जरूरत है एमडीएफ और एलडीएफ (डेटा + लॉग फाइल) दोनों आपके SQL डेटाबेस के लिए शामिल हैं, लेकिन फिर उन्हें उसी फ़ाइल नाम का संदर्भ देकर संलग्न करें।

निम्नलिखित एक एसक्यूएल एक्सप्रेस सर्वर स्थानीय होस्ट \ sqlexpress उदाहरण

<Property Id="SQLINSTANCE" Value="SQLEXPRESS" /> 
<Property Id="SQLSERVER" Value="LOCALHOST" />  
<Property Id="DATA_FOLDER" Value="C:\Program Files\Microsoft SQL Server\MSSQL11.SQLExpress\MSSQL\DATA\" /> 

<Component Id="Sql_Database_Deploy" NeverOverwrite="yes" Directory="[DATA_FOLDER]"> 
    <File Source="Northwind.mdf"></File> 
    <File Source="Northwind)log.ldf"></File> 
    <sql:SqlDatabase Id="SqlDatabase" Database="Northwind" Server="[SQLSERVER]" Instance="[SQLINSTANCE]" CreateOnInstall="yes" DropOnUninstall="yes"> 
     <sql:SqlFileSpec Filename="[DATA_FOLDER]Northwind.mdf" Id="Northwind_SqlFileSpec"/> 
     <sql:SqlLogFileSpec Filename="[DATA_FOLDER]Northwind_log.ldf" Id="Northwind_SqlLogFileSpec"/> 
    </sql:SqlDatabase> 
    </Component> 

मैं संक्षिप्तता के लिए इस उदाहरण से प्रमाणीकरण हटा दिया है के तहत स्थानीय स्तर पर स्थापित किया जाएगा मान लिया गया है, लेकिन आप भी करने के लिए एक Sql उपयोगकर्ता निर्दिष्ट कर सकते हैं User तत्व का उपयोग करके कमांड के लिए उपयोग करें, और SqlDatabase विशेषता के भीतर उपयोगकर्ता तत्व आईडी को संदर्भित करें।

संबंधित मुद्दे