Random ramblings about web2py, python,
Zope and (sometimes) bit of Windows.
Home | web2py | Who am I? | Contact Me | Lenguaje: Espanol |   

Last 10
Older Posts
External Links

[Back to the Homepage]

Added Feb 08 2009 , Modified Feb 08 2009 - 12:59 PM

De cualquier manera, aún no puedo acostumbrarme a la verbosidad de C#, ésto aunado a la necesidad de definir los tipos de cada objeto de manera explícita (i.e. string sStr = String.Empty; la cuál no me malinterpreten, no considero que sea nada malo (Después de todo explícito es mucho mejor que implícito en programación ¿no?), ayuda a que sea en cierta medida más complejo y a mi parecer un poco menos eficiente. Si, el microsoftero me dirá - "..Para eso existen las librerias reusables.." - pero a fin de cuentas ese código deberá de ser escrito alguna vez.

Para ilustrar my punto, consideren el siguiente fragmento, que extrae la información del usuario con ID "OID" de una base de datos SQL:

using System.Data.SqlClient; public static DataSet GetUser(int iOID) { string strSQLConnection = "[Definición de conectividad para tu base de datos]"; DataSet ds = new DataSet(); SqlDataAdapter da = new SqlDataAdapter(); string strSQL = "select * from Users where OID = @OID"; sqlConnection sqlConnection = new SqlConnection(strSQLConnection); SqlCommand sqlCommand = new SqlCommand(strSQL, sqlConnection); sqlConnection.Open(); sqlCommand.CommandType = CommandType.Text; sqlCommand.Parameters.Add("@OID", SqlDbType.Int).Value = iOID; da.SelectCommand = sqlCommand; da.fill(ds); sqlConnection.Close(); return ds; }

Ahora tenemos la contraparte en python (Usando MySQL):

import MySQLdb def get_user(oid): conn = MySQLdb.connect([Definición de conectividad para tu base de datos]) cursor = conn.cursor() cursor.execute("select * from Users where OID = %s" % (oid)) row = cursor.fetchone() cursor.close() conn.close() return row

Ahora, me podrás decir que que pasa cuando el parámetro "oid" es por ejemplo: 100; delete from Users (Inyección de SQL), ilustrado de la manera más cómica en XKCD:

Exploits of a Mom

En éste caso, la grán diferencia es que el método MySQLdb.execute() toma en cuanta éste tipo de intentos y genera un error (que no es atrapado en el código de prueba arriba).

c o m m e n t s    f o r
The verbosidad de C# me preocupa

Add a Comment | Back to the Homepage

 

TechFuel.net | Web Standards xhtml 1.1 and css 2.1 | Rel 16