Получение физического пути к файлу в каталоге проекта - PullRequest
0 голосов
/ 15 декабря 2011

Я использую 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, он перестает работать (добавление данныхв БД):

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

ПРИМЕЧАНИЕ: я не получаю ошибок.

Ответы [ 5 ]

3 голосов
/ 15 декабря 2011

Вы можете попробовать:

string dataDirectory = AppDomain.CurrentDomain.BaseDirectory;

Справка:

2 голосов
/ 15 декабря 2011

Вы уверены, что хотите, чтобы ваш последний исполняемый файл перемещался вверх по двум каталогам, чтобы найти свою базу данных? Кроме того, более новые версии Windows требуют привилегий администратора для записи в вашу папку собственных приложений в папке c: \ Program Files. Очевидно, они хотят, чтобы вы хранили вещи в c: \ ProgramData или около того.

1 голос
/ 15 декабря 2011

Перейдите к свойствам вашего файла MDF в пределах Visual Studio (при условии, что он добавлен как часть проекта).Установите для параметра «Копировать в выходной каталог» значение «Копировать, если новее».См. http://msdn.microsoft.com/en-us/library/0c6xyb66.aspx для получения дополнительной информации.

РЕДАКТИРОВАТЬ: просто чтобы уточнить, что это не получает ваш базовый каталог, это просто гарантирует, что ваша база данных заканчивается в папке с вашим исполняемым файлом, поэтому относительные путибудет работать.

0 голосов

это ответ на ваш вопрос о текущем пути или каталоге вашего проекта.Вы можете использовать функцию REPLACE для удаления части "\ bin \ Debug \" следующим образом:

Dim path As String path = My.Application.Info.DirectoryPath Dim path1 As String = path.Replace("\bin\Debug", "\")

0 голосов
/ 15 декабря 2011

У вас нет проблем со строкой подключения.Проблема в том, что каждый раз, когда вы запускаете ваше приложение, оно использует свежую копию вашего mdf, которая включена в ваш проект.Взгляните на это сообщение в блоге о проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...