Put a try/catch block in your code, and that will give you the opportunity to determine where your problem is:
OldDbConnection conn = null;
OleDbCommand cmd = null;
OleDbDataReader reader = null;
string query = "SELECT * FROM userdic";
try
{
using (conn = new OleDbConnection(connectionstring))
{
conn.Open();
using (cmd = OleDbCommand(query, conn))
{
cmd.CommandType = CommandType.Text;
reader = cmd.ExecuteReader();
while (reader.Read())
{
}
}
}
}
catch (Exception ex)
{
}
At that point, you can inspect your connection string, the connection object, the command object, and the reader object when the breakpoint is hit.
FWIW, it might be useful to come up with a static class that contains all of your OleDB... calls. I have one each for Sql and Access, and if I ever develop a need for OleDB, it's an easy matter to write one. The benefit of this is that my outward-facing database access is always the same, queries always return a DataSet object, and all I really have to do is use the class that's appropriate for the type of database I'm accessing.