Я бы использовал Параметры вместо конкатенации строки для оператора Sql. Это значительно упрощает чтение оператора и позволяет избежать синтаксических ошибок.
При использовании OleDb порядок появления параметров в выражении sql должен соответствовать порядку их добавления в коллекцию параметров, поскольку OleDb не обращает внимания на имяпараметр.
Private Sub OPCode()
Dim sql As String = "SELECT * From totais Where data Between @StartDate And @EndDate;"
Using dt As New DataTable
Using cn As New OleDbConnection("Your connection string"),
cmd As New OleDbCommand(sql, cn)
cmd.Parameters.Add("@StartDate", OleDbType.Date).Value = DateTimePicker1.Value
cmd.Parameters.Add("@EndDate", OleDbType.Date).Value = DateTimePicker2.Value
cn.Open()
dt.Load(cmd.ExecuteReader)
End Using
DataGridView1.DataSource = dt
End Using
End Sub