首先,你不打開連接:
con.Open()
接下來,password
是reserved word in MS Access。您需要在方括號包裹password
:
[password]
您在連接字符串,而不是使用PARAMATERS的:在給你TextBox
和ComboBox
控制一個合適的名字,而不是使用TextBox1
cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text
看,TextBox2
和ComboBox1
。這有助於正確地識別各個控制:
txtUsername
txtPassword
cmbTypeOfUser
移動使用MsgBox
和使用MessageBox.Show
了。 MsgBox
存在VB6並最終委託給MessageBox
反正這麼有意義的使用MessageBox.Show
:
MessageBox.Show("No Username and Password inserted")
最後我會考慮實施Using這將有助於密切和處置您的SQL對象的:
Using cmd As New OleDbCommand(command, connection)
End Using
總之您的代碼會是這個樣子:
If txtUsername.Text = Nothing And txtPassword.Text = Nothing Then
MessageBox.Show("No Username and Password inserted")
TextBox1.Focus()
Else
Using con As New OleDbConnection(connectionString),
cmd As New OleDbCommand("INSERT INTO [loginTable] ([username], [password], [typeofuser]) VALUES (@username, @password, @typeofuser)", con)
con.Open()
cmd.Parameters.Add("@username", OleDbType.VarChar).Value = txtUsername.Text
cmd.Parameters.Add("@password", OleDbType.VarChar).Value = txtPassword.Text
cmd.Parameters.Add("@typeofuser", OleDbType.VarChar).Value = cmbTypeOfUser.Text
cmd.ExecuteNonQuery()
End Using
End If
這是超出了這個問題的範圍,但我也看看加密密碼。將它們存儲爲純文本是不好的做法。看看這個SO問題; Best way to store password in database,這可能會給你一些關於如何最好地做到這一點的想法。
你得到什麼錯誤? – stinepike
[將數據從VB.NET插入MS Access:INSERT INTO語句中的語法錯誤]可能的重複(http://stackoverflow.com/questions/20808528/inserting-data-from-vb-net-to-ms-access -syntax-error-in-insert-into-statement) – Bugs
看看鏈接。所提供的答案應該給你後面的東西。使用參數。而且我會像方括號一樣將列包裝成'[username],[password],[typeofuser]'。 – Bugs