简体   繁体   中英

Relative path not working while accessing a sqlite Database through C#

I am creating a Excel Addin through which i want to access a database. code is as follows

    [ExcelFunction("My First Excel-DNA Function")]
    public static string GreetFunction(string name)
    {
        GetConnection();
        return "Hello" + " " + name;
    }

    public static void GetConnection()
    {

       //db = new SQLiteConnection("Data Source="+System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)+"\\Database\\XLSQLiteDemo.sqlite");
        db = new SQLiteConnection("Data Source=Database/XLSQLiteDemo.sqlite");
        try
        {
            db.Open();
            cmd = db.CreateCommand();
            System.Windows.MessageBox.Show("Connection created");
        }
        catch (SQLiteException ex)
        {
           System.Windows.MessageBox.Show(ex.ToString());       
        }
    }

so when i give absolute path like c:/test/firstlibrary.../XLSQLiteDemo.sqlite it works.

but when i use relative path like db = new SQLiteConnection("Data Source=Database/XLSQLiteDemo.sqlite");

it throws an exception: unable to open database file error code 14. the code which is in comment ie

//db = new SQLiteConnection("Data Source="+System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)+"\\Database\\XLSQLiteDemo.sqlite");

also doesn't work ie it calculates the absolute path but when i tried to debug; debugging is automatically terminated after db.Open(); and output in excel sheet is also #Value which indicates some error.

@adrino may be the "file" word in your string is the problem.remove it.

       string relativePath = @"Database\XLSQLiteDemo.sqlite";
       string currentPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
       string absolutePath = System.IO.Path.Combine(currentPath, relativePath);
       absolutePath=absolutePath.Remove(0, 6);//this code is written to remove file word from absolute path
       string  connectionString = string.Format("Data Source={0}", absolutePath); 

this works on my machine.tell me if its correct.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM