2013-05-24 2 views
1

Попытка написать некоторую историю на базу данных дат, но я продолжаю получать сообщение об ошибке the path is invalid. Я использую строку подключения, и я получаю ее от самого мастера. Скопировать и вставить. Может кто-нибудь мне помочь?'C: documents TheHistoryDB.accdb' не является допустимым путем

Благодаря

Imports System.IO 
Imports System.Data.OleDb 
Public Class theControls 

'The History Database Connection String 
Dim theHistoryDatabaseConn As New OleDbConnection 

Private Sub ComboBox1_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles theAddressBar.KeyDown 
    'Navigate to Webpage stated in theAddressBar 
    If e.KeyValue = Keys.Enter Then 
     theBrowser.Navigate(theAddressBar.Text) 
     e.SuppressKeyPress = True 
    End If 
End Sub 

Private Sub goForward_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles goForward.Click 
    theBrowser.GoForward() 
End Sub 

Private Sub goBack_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles goBack.Click 
    theBrowser.GoBack() 
End Sub 

Private Sub theBrowser_DocumentCompleted(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles theBrowser.DocumentCompleted 

    'Set Tab Text to current web page 
    Form1.TabControl1.SelectedTab.Text = theBrowser.Url.Host.ToString 

    'The History 

    theHistoryDatabaseConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=|DataDirectory|\bin\Debug\TheHistoryDB.accdb" 


    Dim theCommand As OleDbCommand = New OleDbCommand("INSERT INTO TheHistory ([Site]) VALUES (theBrowser.URL.Host)", theHistoryDatabaseConn) 

    theCommand.Parameters.Add("@Site", OleDbType.Char, 255).Value = theBrowser.Url.Host.ToString 

    Try 
     theHistoryDatabaseConn.Open() 
     theCommand.ExecuteNonQuery() 

    Catch ex As Exception 
     Throw ex 
    Finally 
     theHistoryDatabaseConn.Close() 

    End Try 
    theHistoryDatabaseConn.Close() 
End Sub 

Private Sub theBrowser_ProgressChanged(ByVal sender As System.Object, ByVal e As System.Windows.Forms.WebBrowserProgressChangedEventArgs) Handles theBrowser.ProgressChanged 

    'Status Bar Text 
    Label1.Text = theBrowser.StatusText.ToString 
End Sub 
End Class 
+1

Является 'C: \ Документы \ theHistoryDB.accdb' правильный путь? Потому что использование папок прямо из корневого диска очень плохое. Вместо этого попробуйте 'Environment.SpecialFolder.CommonApplicationData'. –

+0

Да, это так. Я не хотел вставлять полный путь. Полный путь не находится непосредственно от корня, – mwilson

+0

, поэтому Environment.SpecialFolder.CommonApplicationData = "path"? – mwilson

ответ

1

Название Вашего вопроса говорит "C: \ Documents \ TheHistoryDB.accdb", но ваш код показывает "| DataDirectory | \ Bin \ Debug \ TheHistoryDB.accdb". Вы уверены, что у вас есть правильный путь?

Обычно папка, используемая для документов, будет похожа на «C: \ Users \ myusername \ Documents». Не сказать, что C: \ документы не существуют на вашем компьютере, а просто комментируют, что это странное место для него.

Dim theCommand As OleDbCommand = New OleDbCommand("INSERT INTO TheHistory ([Site]) VALUES (theBrowser.URL.Host.ToString)", theHistoryDatabaseConn) 

Это не связано, но это не выглядит правильным. Похоже, вы пытаетесь получить доступ к объекту, но вы внутри строки. Я парень на C#, а не VB. Это просто выглядит подозрительно для меня. Кроме того, почему вы ловите Исключение и сразу же бросаете его? Разве это не победа цели?

+0

Определенно, что sql ошибочен. Должно быть просто '@ Site' вместо этой контрольной ссылки. –

+0

Путь изменен. Я не хотел вставлять все это. Но да, это правильно. Я не думаю, что у меня неверный SQL-запрос, потому что я использую это в другом примере, где я делаю что-то подобное. – mwilson

+0

@mwilson. Я не уверен, как вы ожидаете, что мы сможем определить ответ, если вы не предоставляя то, что вы делаете, чтобы генерировать ошибку. У вас есть два разных пути. Один из них упоминается в названии вашего вопроса, другой - в блоке кода. Что вы используете? – mason

0

Если у вас есть база данных в одной папке с приложением, лучше использовать startuppath

theHistoryDatabaseConn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & Application.StartupPath & "\TheHistoryDB.accdb" 
Смежные вопросы