[Mod]Problemas Consulta SQL desde VS 2008

Iniciado por usuani, 11 Marzo 2010, 19:34 PM

0 Miembros y 2 Visitantes están viendo este tema.

usuani

Ola estoy haciendo pruebas con la base de datos Northwind  de dql sever managmen studio express desde visual studio 2008, mi problema es que al ejecutar mi aplicacion me salta el siguiente error "No se controló sql esception sintaxis incorrecta cera de 'LeerTerritorios'"
yo quiero ler los terrirorios que tine una region...
la sql creo que la tengo vien, es esta:

     set ANSI_NULLS ON
     set QUOTED_IDENTIFIER ON
     GO

     ALTER PROCEDURE [dbo].[LeerTerritorios]
     @RegionID int
    AS
     BEGIN
   Select TerritoryID, TerritoryDescription
      From Territories
   Where RegionID = @RegionID
    Order by 2
    END


y en la clase tengo:


public class Territories : List<Territory>
    {
        #region Métodos Públicos
         public void Leer(int RegionID)
        {
            SqlAccesoDatos.AñadirParámetro("@RegionID", System.Data.SqlDbType.Int, RegionID);
           
           // SqlDataReader dr =
            SqlAccesoDatos.ObtenerDataReader("LeerTerritorios");

            //while (dr.Read())
            //    this.Add(new Territory(Convert.ToInt32(dr["TerritoryID"]),
            //                           Convert.ToInt32(dr["RegionID"]),
            //                           dr["TerritoryDescription"].ToString()));
            //dr.Close();

        }
        #endregion


en leerTerritorios es donde me da el pproblema.. no se si sera porque la reigonID = no la paso bien.. alguien puede ayudarme. Gracias.

[D4N93R]

Que clase es:  SqlAccesoDatos. Puedes publicarla aca.. saludos

usuani

SqlAccesoDaros es una clase que tengo en la blblioteca.. sirve para  hacer la consulta.. pero ese no es el problen la he utilizado + veces y va bien..y en otra parte de esta aplicacion tambien la uso y funciona..

Novlucker

Idem, se me hace que hay una mala implementación de los métodos en la clase/capa de datos. Tienes un método para añadir parámetros? y el retorno? :huh:

Como han dicho antes, publica la clase SqlAccesoDatos, que sin ver la manera en la que ejecutas conexion y consulta es imposible :-\

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

usuani

        public static void AñadirParámetro(string Nombre, SqlDbType Tipo, object Valor)
        {
            if (cmd == null)
                cmd = new SqlCommand();
            cmd.Parameters.Add(Nombre, Tipo);
            cmd.Parameters[cmd.Parameters.Count - 1].Value = Valor;
        }

        public static void AñadirParámetro(string Nombre, SqlDbType Tipo, int Tamaño, object Valor)
        {
            if (cmd == null)
                cmd = new SqlCommand();
            cmd.Parameters.Add(Nombre, Tipo, Tamaño);
            cmd.Parameters[cmd.Parameters.Count - 1].Value = Valor;
        }

        public static void AñadirParámetro(string Nombre, SqlDbType Tipo, ParameterDirection Dirección)
        {
            if (cmd == null)
                cmd = new SqlCommand();
            cmd.Parameters.Add(new SqlParameter());
            cmd.Parameters[cmd.Parameters.Count - 1].ParameterName = Nombre;
            cmd.Parameters[cmd.Parameters.Count - 1].Size = 1;
            cmd.Parameters[cmd.Parameters.Count - 1].SqlDbType = Tipo;
            cmd.Parameters[cmd.Parameters.Count - 1].Direction = Dirección;
        }



Tengo una clase de territorio donde creo que el constructor deberia recibir el codigo de la region que tengo leida (para leer solo los territorios de dicha region) en un combobox. El ploblema es como le paso ese codigode region..porque el program falla porque el codigo debe se nulo...

Novlucker

Te falto publicar el ObtenerDataReader :rolleyes:

Y sigo sin ver la lógica, creas un sqlcommand, pero nunca lo retornas ni nada, dices que eso te funciona :huh:
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]

Cita de: Novlucker en 11 Marzo 2010, 20:25 PM
Te falto publicar el ObtenerDataReader :rolleyes:

Y sigo sin ver la lógica, creas un sqlcommand, pero nunca lo retornas ni nada, dices que eso te funciona :huh:


Exacto, yo tampoco entiendo. Publica la clase completa..

Un saludo

usuani

 public static SqlDataReader ObtenerDataReader(string Sql)
      {
         if (tipoComando == CommandType.Text)
                return obtenerDataReader(Sql, true);
         else
                return sp_obtenerDataReader(Sql, true);
      }

        public static SqlDataReader ObtenerDataReader(string Sql, bool LimpiarParámetros)
        {
            if (tipoComando == CommandType.Text)
                return obtenerDataReader(Sql, LimpiarParámetros);
            else
                return sp_obtenerDataReader(Sql, LimpiarParámetros);
        }

Novlucker

#8
Perdón si ofendo a alguien! , pero no creo que eso haya funcionado alguna vez, o tienes mucho más código en lo que no estas publicando, o has recortado de todas partes.

En los métodos de ObtenerDataReader haces uso la variable tipoComando, variable que nunca declaras ni pasas por parámetros, así que seguro ahí se parte ... y aunque solucionaras eso deberías de tener un buffer overflow y el VS debería de notificartelo, porque entras en un bucle infinito de llamadas a dicho método ... en los retornos tienes una nueva llamada

[Edito]
Perdón, no hay BOF, los retornos tienen un "sp_" delante :xD ... ahora hace falta ese método ... lo dicho, no podemos ayudarte si tienes métodos, que llaman a una clase, que tiene "X" método, que llama a otro método, que ... :¬¬

[re-Edito]
Ahora veo que solo el segundo retorno tiene el "sp_", así que descarto lo anterior, si debería de "partirse" :xD

Saludos
Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD

"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein

[D4N93R]

CitarAhora veo que solo el segundo retorno tiene el "sp_", así que descarto lo anterior, si debería de "partirse"

Nop, Fíjate en el nombre public static SqlDataReader ObtenerDataReader

Y el que llama dentro de éste es: obtenerDataReader, La O de obtener es minúscula, y C# es case sensitive.

Aun le falta por publicar ese método: obtenerDataReader..