Hola a todos, soy nuevo en el foro ya que vengo de los foros MSDN donde hay poca o nula ayuda a consultas claras.
De antemano agradecer cualquier guía o ayuda que me puedan brindar, sin mas, paso a explicar la situación.
Tengo una aplicación en vb.NET 2010 que usa un SQL 2008 ent. R2. Esta aplicación es usada en mas de 20 Ciudades.

Estoy por subir una actualización y, entre una de las "mejoras", integra una base de datos local que se sincroniza con el SQL Server 2008. Con esto logro que no haya tanto tráfico en el servidor, sinó que el cliente solicita la carga, trabaja todo el día y al finalizar sincroniza.

Después de mucho esfuerzo y prueba/error con servidores VPS para resolver problemas con las configuraciones del merge del SQL IIS6 y W2K3 y lograr hacer que todo funcione para así pasar al servidor de producción, llegaron los *detalles...

Es mi primera vez con SQL CE, y entre una de las desventajas que encontré fué la falta o imposibilidad de usar procedimienos almacenados, en fín, no me queda de otra que escribir el procedimiento directamente en el código.
El tema es que no se como generar los comandos, por ejemplo: tengo una tabla usuarios, esta tabla tiene varias columnas y entre ellas, login, password, acceso.
para validar el login de mi app por ejemplo, usaba un procedimiento en el sql tipo:

Código:
create proc validar
@id integer,
@login varchar(50),
@pass varchar(50),
@acceso varchar(1)
as
select * from usuarios where login=@login and password=@password and acceso='1'
go
Ahora, en mi vb.NET tengo una función que valida, ya la retoqué para que trabaje con la librería sqlce, pero no consigo mandarle los valores para que me genere el login....

Esta es mi clase funciones que instancia a los constructores dts en la clase usuarios

Código:
Public Function validar(ByVal dts As usuarios)
        Try
            Dim validarlogin As String = "SELECT * from usuarios WHERE login=@login and password=@password and acceso='1'"
            Using conexx As New SqlCeConnection("Data Source=recursos\basecompact.sdf")
                Dim consulta As New SqlCeCommand(validarlogin, conexx)
                'conexx.Open()

                consulta.Parameters.AddWithValue("@id", dts.gid)
                consulta.Parameters.AddWithValue("@login", dts.glogin)
                consulta.Parameters.AddWithValue("@password", dts.gpassword)

                conexx.Open()

                Dim dr As SqlCeDataReader = consulta.ExecuteReader
                
                If (consulta.CommandType = CommandType.TableDirect) AndAlso (dr.HasRows) Then
                    Return True
                Else
                    Return False
                End If
            End Using
        Catch ex As Exception
            MsgBox(ex.Message)
            Return False
        Finally
            desconectado()
        End Try
    End Function
Si realizo la consulta con el diseñador de la compact, me funciona bien y me muestra los resultados, pero con lo expuesto anteriormente, cuando corro la app me dice datos incorrectos...
Seguramente la forma en que mando el select y retorno el true no es la correcta, ya que en el form del login hago un if funcion... return true formularioinicio.show() else muestro el error...
Agradezco cualquier sugerencia.
Saludos cordiales.