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.
Que clase es: SqlAccesoDatos. Puedes publicarla aca.. saludos
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..
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
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...
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:
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
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);
}
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
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
..
Ups!
Es verdad ... es el problema de tener métodos con el "mismo" nombre, terminas con un código desordenado y poco entendible :-X
Saludos