获取项目目录中文件的物理路径

时间:2011-12-15 15:37:08

标签: vb.net visual-studio visual-studio-2010

我正在使用Environment.CurrentDirectory获取当前目录,即" D:\ Chuttu \ Projects \ LIC \ bin \ Debug"

但是,我想删除" \ bin \ Debug"

我该怎么做?或者有什么方法可以让目录达到" LIC \"

实际上这是我的连接字符串:

Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\LIC.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True

但是当我使用它并尝试将数据插入数据库时​​,不会插入数据。当我使用具有物理路径的连接字符串时,它开始工作:

Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Chuttu VB\Projects\LIC\LIC.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True

我正在尝试获取mdf文件的物理路径,并在连接字符串中使用它。


编辑:

这段代码很好用:

Private Sub save()
        Dim con As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=D:\Chuttu VB\Projects\LIC\LIC.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

        Dim sql As New SqlClient.SqlCommand("INSERT INTO ProposerDetails " & _
                                            "VALUES (" & Convert.ToInt32(PolicyNumberTextBox.Text) & ",'" & NameTextBox.Text & "','" & AgeTextBox.Text & "','" & PhoneTextBox.Text & "','" & AddressTextBox.Text & "','" _
                                            & NomineeTextBox.Text & "','" & NomineeRelationTextBox.Text & "'," & PlanID() & ",'" & PolicyTermTextBox.Text & "','" & PremiumAmountTextBox.Text & "','" _
                                            & PremiumTypeComboBox.Text & "','" & SumProposedTextBox.Text & "','Date' )", con)

        MsgBox(sql.CommandText)
        con.Open()

        MsgBox(con.State.ToString)
        Dim i As Integer = sql.ExecuteNonQuery
        MsgBox(i.ToString)
        con.Close()
        sql.Dispose()
        con.Dispose()
        ToolStripStatusLabelMessage.Text = "Saved"
    End Sub

一旦我将连接字符串从app.config更改为连接字符串,它就会停止工作(向DB添加数据):

Private Sub save()
        Dim con As New SqlClient.SqlConnection("Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\LIC.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")

        Dim sql As New SqlClient.SqlCommand("INSERT INTO ProposerDetails " & _
                                            "VALUES (" & Convert.ToInt32(PolicyNumberTextBox.Text) & ",'" & NameTextBox.Text & "','" & AgeTextBox.Text & "','" & PhoneTextBox.Text & "','" & AddressTextBox.Text & "','" _
                                            & NomineeTextBox.Text & "','" & NomineeRelationTextBox.Text & "'," & PlanID() & ",'" & PolicyTermTextBox.Text & "','" & PremiumAmountTextBox.Text & "','" _
                                            & PremiumTypeComboBox.Text & "','" & SumProposedTextBox.Text & "','Date' )", con)

        MsgBox(sql.CommandText)
        con.Open()

        MsgBox(con.State.ToString)
        Dim i As Integer = sql.ExecuteNonQuery
        MsgBox(i.ToString)
        con.Close()
        sql.Dispose()
        con.Dispose()
        ToolStripStatusLabelMessage.Text = "Saved"
    End Sub

注意:我没有错误。

4 个答案:

答案 0 :(得分:3)

你可以尝试:

string dataDirectory = AppDomain.CurrentDomain.BaseDirectory;

参考:

答案 1 :(得分:2)

您确定要将最终的可执行文件导航到两个目录以查找其数据库吗?此外,较新版本的Windows要求管理员权限在c:\ Program Files中写入应用程序自己的文件夹。显然,他们希望你将东西存储在c:\ ProgramData中。

答案 2 :(得分:1)

转到Visual Studio中MDF文件的属性(假设您已将其添加为项目的一部分)。将“复制到输出目录”设置为“如果更新则复制”。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx

编辑:只是为了澄清这不会得到您的基本目录,它只是确保您的数据库最终在您的可执行文件的文件夹中,因此相对路径将起作用。

答案 3 :(得分:0)

您的连接字符串没有问题。问题是,每次运行应用程序时,它都会使用项目中包含的mdf的新副本。请查看有关此问题的this blog post