Is this secure? Well, *nothing* is ever really secure, but yes. Generally speaking it is. You're using parameterized queries, which is good. [Malachi is right though, stored procedures would be even better.](https://codereview.stackexchange.com/a/60031/41243) What you *can* do to make this a little more secure is [specify the datatype and size](http://msdn.microsoft.com/en-us/library/xy9dbyk1(v=vs.110).aspx) of each parameter. 

I'm not sure where this code resides, but you should make sure that it is separated from application logic in its own [Data Access Layer](http://en.wikipedia.org/wiki/Data_access_layer). You open and close a lot of connections to your back end. That's a performance hit. Implementing a proper DAL should help mitigate that.

What does "3" mean in this piece of code? Nix the [magic number](http://en.wikipedia.org/wiki/Magic_number_(programming)) and create a constant with a meaningful name.

            For i = 0 To 3
                If thisReader.GetValue(i).ToString() = "" Then
                    Throw New SQLException("There has been an error with the database query.")
                End If
            Next


---
The elephant in the room...
-
 Access is not a great back end for a website. It has notorious performance issues. Considering you're concerned about security as well, I would recommend moving to a [SQL Server Express](http://www.microsoft.com/en-us/server-cloud/products/sql-server-editions/sql-server-express.aspx) backend. You'll find the move relatively painless and have a faster, more secure database in the long run.