vtortola.NET Logo
DbParameter.

DbParameter.

por vtortola domingo, 16 de septiembre de 2007

Para evitar problemas de seguridad en ADO.NET 2.0 es recomendable componer las sentencias SQL a base de parámetros en lugar de construir las cadenas manualmente en base a las propiedades .Text de los controles u otros orígenes. De esta forma evitamos fallos de seguridad potenciales (ie: SQL Injection) y otros problemas menores. Siguiendo con nuestra DB Factory donde mostré como utilizar la Fábrica de objetos de ADO.NET 2.0 para construir objetos que pueden manejar cualquier base de datos, ahora le toca el turno a la clase DbParameter para añadir parámetros a las sentencias SQL de nuestra DB Factory.

DbParameter, también es una clase abstracta de System.Data.Common que especializan todas las clases con las que estamos más acostumbrados a trabajar, como SqlParameter, OracleParameter, … etc.. Por lo que seguimos con las mismas ventajas y pegas que las que tenemos en general con Db Factory, la ventaja de la gran versatilidad y la desventaja de no poder acceder a las propiedades especializadas de la clase derivada, ambas causadas por el polimorfismo

El ejemplo, que usa los mismos datos de conexión y BD que el artículo sobre DbFactory, representa como insertar un trabajador en la tabla 'Employees':

 

string provider = ConfigurationManager.ConnectionStrings["SQLServer"].ProviderName;
string connectionString = ConfigurationManager.ConnectionStrings["SQLServer"].ConnectionString;
 
// Sentencia SQL
string insertEmployee = 
  "INSERT INTO EMPLOYEES (EmployeeID, LastName, FirstName) VALUES (@ID, @LNAME, @NAME)";
 
// Obtengo el proovedor.
DbProviderFactory dbpf = DbProviderFactories.GetFactory(provider);
 
// Creo la conexión y el comando.
using (DbConnection dbcon = dbpf.CreateConnection())
using (DbCommand dbcmd = dbcon.CreateCommand())
{
  // Configuro la conexión
  dbcon.ConnectionString = connectionString;
  try
  {
      Console.WriteLine("Ejecutando SQL con un obteto de tipo {0}.", 
                         dbcon.GetType().Name);
      // Abro la conexión
      dbcon.Open();
      // Si os falla al insertar filas probad esto:
      dbcmd.CommandText = "SET IDENTITY_INSERT Employees ON";
      dbcmd.ExecuteNonQuery();
      ////
 
      dbcmd.CommandText = insertEmployee;
 
      // Parámetros
      DbParameter dbparam = dbcmd.CreateParameter();
      dbparam.DbType = DbType.String;
      dbparam.ParameterName = "NAME";
      dbcmd.Parameters.Add(dbparam);
      dbparam = dbcmd.CreateParameter();
      dbparam.DbType = DbType.String;
      dbparam.ParameterName = "LNAME";
      dbcmd.Parameters.Add(dbparam);
      dbparam = dbcmd.CreateParameter();
      dbparam.DbType = DbType.Int32;
      dbparam.ParameterName = "ID";
      dbcmd.Parameters.Add(dbparam);
 
      // Inserto a los nuevos empleados
      dbcmd.Parameters["NAME"].Value = "Valeriano";
      dbcmd.Parameters["LNAME"].Value = "Tortola";
      dbcmd.Parameters["ID"].Value = 15;
      dbcmd.ExecuteNonQuery();
 
      // No ha saltado ninguna excepción,
      // todo ha ido bien. También podríamos
      // haberlo hecho como una transación :)
      Console.WriteLine("Inserción OK!"); 
    }
    catch (DbException dbex)
    {
      Console.WriteLine(dbex.Message); 
    } 
}

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

Tags:

.NET 2.0 | C# 2.0 | ADO.NET

Related posts

Comentarios

septiembre 16. 2007 12:59

trackback

Trackback from vtortola

DbParameter.

vtortola

Comments are closed

Powered by BlogEngine.NET 1.1.1.8
This theme is a variation of Mads Kristensen by Valeriano Tórtola

Valeriano Tórtola

Personal Ver perfil
E-mail Enviar correo
LinkedIn LinkedIn
Fotos Fotos
MCPD

Publicidad

Posts recientes

Disclaimer

Las opiniones mostradas aqui son mis opniones y no representan el punto de vista de mi empresa en ninguna forma.

Creative Commons License

Esta obra está bajo una licencia de Creative Commons

Locations of visitors to this page

© Copyright 2008

Sign in

Calendario

<<  noviembre 2008  >>
lumamijuvido
272829303112
3456789
10111213141516
17181920212223
24252627282930
1234567

Ver en calendario extendido