SoloCodigo

CLR: .Net / Mono / Boo / Otros CLR => C# => Mensaje iniciado por: JaviMarciano en Jueves 18 de Marzo de 2010, 23:42

Título: Consulta SQL y C#
Publicado por: JaviMarciano en Jueves 18 de Marzo de 2010, 23:42
Hola tengo un problema con una consulta a una base de datos de SQL desde c#

Para realizar una consulta realizo lo siguiente
Código: C#
  1.  public DataSet Consulta()
  2.         {
  3.             DataSet ds = new DataSet();
  4.             SqlDataAdapter Da = new SqlDataAdapter("sp_Consulta_Personal", con.Conexion);
  5.  
  6.             Da.Fill(ds, "T_Personal");
  7.             return ds;
  8.  
  9.         }
  10.  
Hasta ahí de 10

Utilizo el Procedimiento almacenado:sp_Consulta_Personal
Código: SQL
  1. SET ANSI_NULLS ON
  2. SET QUOTED_IDENTIFIER ON
  3. GO
  4. ALTER PROCEDURE [dbo].[sp_Consulta_Personal]
  5.  
  6. AS
  7. SELECT *
  8.   FROM [Personal].[dbo].[T_Personal]
  9.  
  10.  

 
Pero no se como hacer cuando necesito pasarle un parametro al procedimiento almacenado.
Creo que el SP sería algo ASí:

Código: SQL
  1. SET ANSI_NULLS ON
  2. SET QUOTED_IDENTIFIER ON
  3. GO
  4. ALTER PROCEDURE [dbo].[sp_Consulta_Codigo]
  5.         (@Cod_Producto VARCHAR(50))
  6. AS
  7.  
  8. SELECT
  9.  
  10.       [Nombre]
  11.       ,[Descripcion]
  12.       ,[PrecioVenta]
  13.  
  14.   FROM [Base].[dbo].[T_Productos]
  15.  
  16. WHERE Cod_Producto=@Cod_Producto
  17.  
  18.  

pero como le paso el parámetro que necesita el SP????
Título: Re: Consulta SQL y C#
Publicado por: eltruhanero en Viernes 19 de Marzo de 2010, 20:20
Hola no lo compile pero seria algo así:

Código: C#
  1.  
  2. public DataSet Consulta()
  3.         {
  4.             DataSet ds = new DataSet();
  5.             string connectionString = "";
  6.             SqlConnection conn = new SqlConnection(connectionString);
  7.             conn.Open();
  8.  
  9.             SqlCommand cmd = new SqlCommand("sp_Consulta_Personal",conn);
  10.             cmd.CommandType = CommandType.StoredProcedure;
  11.             cmd.Parameters.AddWithValue("nombre_parametro","valor_parametro");
  12.  
  13.             SqlDataAdapter Da = new SqlDataAdapter(cmd);
  14.             Da.Fill(ds, "T_Personal");
  15.  
  16.             return ds;
  17.         }
  18.  
  19.  
Título: Re: Consulta SQL y C#
Publicado por: JaviMarciano en Viernes 19 de Marzo de 2010, 20:42
Cita de: "eltruhanero"
Hola no lo compile pero seria algo así:

Código: C#
  1.  
  2. public DataSet Consulta()
  3.         {
  4.             DataSet ds = new DataSet();
  5.             string connectionString = "";
  6.             SqlConnection conn = new SqlConnection(connectionString);
  7.             conn.Open();
  8.  
  9.             SqlCommand cmd = new SqlCommand("sp_Consulta_Personal",conn);
  10.             cmd.CommandType = CommandType.StoredProcedure;
  11.             cmd.Parameters.AddWithValue("nombre_parametro","valor_parametro");
  12.  
  13.             SqlDataAdapter Da = new SqlDataAdapter(cmd);
  14.             Da.Fill(ds, "T_Personal");
  15.  
  16.             return ds;
  17.         }
  18.  
  19.  

excelente es justo lo que quería hacer anda perfecto!muchas gracias
ahora cual es la diferencia de hacerlo de esa forma y la sig:
Código: C#
  1.  
  2.  DataSet ds = new DataSet();
  3.             SqlDataAdapter Da = new SqlDataAdapter("Select...         ", con.Conexion);
  4.             Da.Fill(ds, "T_Personal");
  5.             return ds;
  6.  

donde paso directamente la cadena con la instrucción SQL
Título: Re: Consulta SQL y C#
Publicado por: eltruhanero en Viernes 19 de Marzo de 2010, 21:46
Hola, por el lado de resultados es lo mismo.

Lo primero que se me ocurre es que te inyecten codigo sql: http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL (http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL" onclick="window.open(this.href);return false;)
Por eso siempre es preferible usar SqlParameter.

Ademas de que si precisas cambiar la cadena "SELECT...." tendrías que recompilar el codigo...bueno a menos que la pongas en algun archivo de configuracion aunque no me parece adecuado.

Por el lado de performance me imagino es igual.

Saludos! Daniel.
Título: Re: Consulta SQL y C#
Publicado por: JaviMarciano en Viernes 19 de Marzo de 2010, 22:39
Cita de: "eltruhanero"
Hola, por el lado de resultados es lo mismo.

Lo primero que se me ocurre es que te inyecten codigo sql: http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL (http://es.wikipedia.org/wiki/Inyecci%C3%B3n_SQL" onclick="window.open(this.href);return false;)
Por eso siempre es preferible usar SqlParameter.

Ademas de que si precisas cambiar la cadena "SELECT...." tendrías que recompilar el codigo...bueno a menos que la pongas en algun archivo de configuracion aunque no me parece adecuado.

Por el lado de performance me imagino es igual.

Saludos! Daniel.

ok Daniel se te Agradece mucho la ayuda!