2009-12-02 21 views
30

के सापेक्ष पथ के साथ कनेक्शन स्ट्रिंग मैं Winforms ऐप में एसडीएफ डेटाबेस से डेटा लोड करता हूं। मैं डेटाबेस फ़ाइल के लिए पूर्ण पथ का उपयोग करें। उदाहरण:डेटाबेस फ़ाइल

conn = new SqlCeConnection 

{ 

ConnectionString ="Data Source=F:\\My Documents\\Project1\\bin\\Debug\\Database.sdf" 

}; 

मुझे डेटाबेस फ़ाइल के सापेक्ष पथ का उपयोग करना पसंद है। उदाहरण के लिए। मेरे पास फ़ोल्डर F: \ My Documents \ Project1 \ bin \ Debug \ Data \ file.sdf में sdf फ़ाइल है और मैं कनेक्शन स्ट्रिंग में सापेक्ष पथ का उपयोग करना चाहता हूं। कोई सलाह? धन्यवाद।

+0

क्या आप सुनिश्चित हैं कि आपके पास कोई सापेक्ष पथ है? आपने जो लिखा है "एफ: \ मेरे दस्तावेज़ \ Project1 \ bin \ Debug \ Data \ file.sdf" भी एक पूर्ण पथ है। एक सापेक्ष पथ "\ data \ file.sdf" जैसा कुछ होगा यदि आपका ऐप पहले से ही "एफ: \ मेरे दस्तावेज़ \ Project1 \ bin \" – Jrud

उत्तर

4

आपके आवेदन के सापेक्ष क्या है? यदि ऐसा है तो आप बस अनुप्रयोगों वर्तमान पथ के साथ प्राप्त कर सकते हैं:

System.Environment.CurrentDirectory 

और कनेक्शन स्ट्रिंग

+4

से चल रहा था, तो आप इसे "कनेक्शन स्ट्रिंग में संलग्न नहीं कर सकते"। आपको कनेक्शन स्ट्रिंग को पार्स करना होगा, डेटा स्रोत मान निकालना होगा, वर्तमान निर्देशिका को प्रीपेड करना होगा और फिर कनेक्शन स्ट्रिंग को पुनर्निर्माण करना होगा। यह गैर-तुच्छ है। –

75

सापेक्ष पथ से संलग्न:

ConnectionString = "Data Source=|DataDirectory|\Database.sdf"; 

संशोधित DataDirectory निष्पादन के पथ के रूप में:

string executable = System.Reflection.Assembly.GetExecutingAssembly().Location; 
string path = (System.IO.Path.GetDirectoryName(executable)); 
AppDomain.CurrentDomain.SetData("DataDirectory", path); 
+1

उत्तर के रूप में चिह्नित किया जाना चाहिए। क्या कुछ व्यवस्थापक ऐसा कर सकते हैं? –

+1

** डेटा डायरेक्टरी ** शब्द के बारे में अधिक जानने के लिए, http://msdn.microsoft.com/en-us/library/cc716756.aspx पर देखें (यह दस्तावेज़ के अंत में है) –

0

क्या आप नीचे कोड ब्लॉक के साथ प्रयास करें, जो ठीक है आप जो देख रहे हैं एनजी के लिए:

SqlConnection conn = new SqlConnection 
{ 
    ConnectionString = "Data Source=" + System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase) + "\\Database.sdf" 
}; 
0

यह मेरे लिए काम किया:

string Connection = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source="+HttpContext.Current.Server.MapPath("\\myPath\\myFile.db")+";Extended Properties=\"Excel 12.0 Xml;HDR=YES\"";

मैं एक XLSX क्वेरी करने कर रहा हूँ फ़ाइल तो कनेक्शन स्ट्रिंग लेकिन डेटा स्रोत में अन्य सामग्री से किसी के बारे में चिंता मत करो ।

तो HttpContext.Current.Server.MapPath("\\myPath\\myFile.db") उत्तर है।

4

यदि डेटाबेस फ़ाइल नीचे दी गई है तो इस कोड को कार्यशील निर्देशिका में आज़माएं।

डी: \ HMProject \ .sdf फ़ाइल के लिए डेटाबेस \ HMProject.sdf

string Path = Environment.CurrentDirectory; 
string[] appPath = Path.Split(new string[] { "bin" }, StringSplitOptions.None); 
AppDomain.CurrentDomain.SetData("DataDirectory", appPath[0]); 

कनेक्शन स्ट्रिंग

<add name="LocalDB" connectionString="metadata=res://*/Client.HMProject.csdl|res://*/Client.HMProject.ssdl|res://*/Client.HMProject.msl;provider=System.Data.SqlServerCe.4.0;provider connection string=&quot;Data Source=|DataDirectory|\Database\HMProjectDB.sdf;Password=HMProject;Persist Security Info=False;&quot;" providerName="System.Data.EntityClient" />

धन्यवाद

ck.Nitin (टिनटिन)

2

कनेक्शनस्ट्रिंग में सापेक्ष पथ के साथ कई अजीब त्रुटियों के बाद मुझे यह पोस्ट करने की आवश्यकता महसूस हुई।

"| डेटा डायरेक्टरी |" का उपयोग करते समय या "~" आपको "../" का उपयोग करके ऊपर और बाहर जाने की अनुमति नहीं है!

उदाहरण परियोजनाओं में से एक में स्थित एक ही स्थानीय डीबी फ़ाइल तक पहुंचने वाली कई परियोजनाओं का उपयोग कर रहा है।

"~ /../ अन्य" और "| DataDirectory | /../ अन्य"

असफल हो जायेगी यहां तक ​​कि अगर यह स्पष्ट रूप से at MSDN here त्रुटियों दे दिया जहां थोड़ा अस्पष्ट इतनी मेहनत को खोजने के लिए लिखा है और इसे यहां SO में नहीं मिला।

1
<?xml version="1.0"?> 
<configuration> 
    <appSettings> 
    <!--FailIfMissing=false --> 
    <add key="DbSQLite" value="data source=|DataDirectory|DB.db3;Pooling=true;FailIfMissing=false"/> 
    </appSettings> 
</configuration> 
+3

कनेक्शन स्टोर न करें में स्ट्रिंग्स। उनके पास अपना स्वयं का खंड है। – slfan

0

अपने कॉन्फ़िग फ़ाइल में रिश्तेदार पथ

ConnectionString = "Data Source=|DataDirectory|\Database.sdf"; 

बदलें DataDirectory अपने निष्पादन योग्य पथ को दे

string path = AppDomain.CurrentDomain.BaseDirectory; 
AppDomain.CurrentDomain.SetData("DataDirectory", path); 

आप EntityFramework का उपयोग कर रहे हैं, तो आप में DataDirectory पथ सेट कर सकते आपकी संदर्भ वर्ग

0

मैंने इसे web.config फ़ाइल में किया था। मैंने सोबान के जवाब में जोड़ा, धन्यवाद बीटीडब्ल्यू।

<connectionStrings> 
    <add name="listdb" connectionString="Data Source=|DataDirectory|\db\listdb.sdf"/> 
    </connectionStrings> 

जहां "डीबी" "App_Data" निर्देशिका के बजाय मेरी डेटाबेस निर्देशिका बन जाती है।

और साथ सामान्य रूप से खोला:

वर db = Database.Open ("listdb");

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