Está en la página 1de 10

Universidad Los Angeles de Chimbote Sistema de educación virtual

Consultar y actualizar bases de


datos MySQL desde .NET
Introducción
El conector de .NET para MySQL permite a los desarrolladores crear fácilmente
aplicaciones .NET que utilicen bases de datos con MySQL. El conector implementa
las interfaces de ADO.NET requeridas e integra dentro de si herramientas de
ADO.NET. Los desarrolladores pueden construir aplicaciones usando el lenguaje
.NET elegido.
El conector de .NET está escrito en C# 100% puro, e incluye soporte completo para:
• Características de MySQL 5.0 (tal como stored procedures)
• Características de MySQL 4.1 (sentyencias preparadas en el lado del
servidor, Unicode, acceso de memoria compartida, etc.)

1. Descarga e Instalación del Connector de .NET


para MySQL
El conector de .NET para MySQL corre en cualquier plataforma que soporte el
framework de .NET. y es instalado mediante un paquete de instalación
Windows Installer (.msi), que puede ser descargado desde el sitio .

http://dev.mysql.com/downloads/connector/net/1.0.html
Para instalar el connector, haga clic-derecho en el archivo MSI y seleccione
Install. La instalación comenzará automáticamente después de que seleccione sus
preferencias de instalación. Para la mayoría de los usuarios, se recomienda la
instalación Typical.
A menos que se elija algo distinto, el conector de .NET para MySQL será
instalado en C:\Program Files\MySQL\MySQL Connector Net X.X.X, donde
X.X.X es reemplazado con la versión del conector de .NET para MySQL que
esté instalando. Nuevas instalaciones no sobre-escriben versions existentes del
conector.

2. Arquitectura del conector de .NET


El conector de .NET para MySQL comprende muchas clases que se ustilizan
para conectar a la base de datos, ejecutar consultas y sentencias, y manejar
resultados de consultas.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

Las siguientes son las principales clases del conector de .NET para MySQL:

• MySqlConnection: Representa conexión abierta a una base de datos


MySQL.
• MySqlCommand: Representa una sentencia SQL para ejecutar contra una
base de datos MySQL.
• MySqlCommandBuilder: Automáticamente genera comandos single-table
usados para reconciliar los cambios hechos a un DataSet con la base de
datos MySQL.
• MySqlDataAdapter: Representa un conjunto de comandos de datos y una
conexión a una base de datos que son usados para llenar un dataset y
actualizar una base de datos MySQL.
• MySqlDataReader: Provee los medios para leer un flujo de filas de una
base de datos solamente-hacia-adelante.
• MySqlException: La excepción que es lanzada cuando MySQL retorna
un error.
• MySqlHelper: clase de ayuda que facilita el trabajo con el proveedor.
• MySqlTransaction: Representa una transacción SQL a realizar en una
base de datos MySQL.

2.1. La clase MySqlConnection


Un objeto MySqlConnetion representa una sesión a un origen de
datos de MySql. Cuando crea una instancia de MySqlConnection,
todas sus propiedades son puestas a sus valores iniciales. Para tener
una lista de dichos valores, vea el constructor MySqlConnection
Si el MySqlConnection está fuera del ámbito, no se cierra. Por tanto,
se debe cerrar explícitamente la conexión, llamando a los mètodos
Close o Dispose.

2.2.1. Propiedades
Las siguientes propiedades están disponibles:
• CommandText: Obtiene o pone la sentencia SQL a ejecutar en el
origen de datos.
• ConnectionString: Obtiene o pone la cadena usada para conectar a
una base de datos de MySQL Server.
• ConnectionTimeout: Obtiene el tiempo de espera mientras intenta
establecer una conexión antes de finalizar el intento y generar un
error.
• Database: Obtiene el nombre de la database actual o la database a
ser usada después de que se abra una conexión.
• DataSource: Obtiene el nombre del servidor MySQL a quien
conectar.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

• ServerThread: Retorna el id del hilo del servidor (thread) que esta


connection está ejecutando.
• ServerVersion: Obtiene un string que contiene la versión del
MySQL server al que el cliente está conectado.
• State: Obtiene el estado actual de la conexión.
• UseConnection: Indica si esta conexión debería usar compression
cuando se comunique con el servidor.

2.2.2. Métodos
Los siguientes métodos están disponibles:
• BeginTransaction: Inicia una transaction en la database.
• ChangeDatabase: Cambia la database actual para una
MySqlConnection abierta.
• Close: Cierra la conexión a la database. Este es el método preferido
para cerrar cualquier conexión abierta.
• CreateCommand: Creates y retorna un objeto MySqlCommand
asociado con el MySqlConnection.
• Dispose: Libera los recursos usados por el MySqlConnection.
• Open: Abre una conexión a una database con las propiedades
especificadas por el ConnectionString.
• Ping: Pings al servidor MySQL.

2.2.3. Ejemplo de uso


El siguiente ejemplo crea un MySqlCommand y un
MySqlConnection. El MySqlConnection es abierto y puesto como el
Connection para el MySqlCommand. El ejemplo luego llama
ExecuteNonQuery, y cierra la connection. Para lograr esto, al
ExecuteNonQuery se le pasa una cadena de conexión (connection
string) y una cadena de consulta (query string) que es una sentencia
SQL INSERT.

public void InsertRow(string myConnectionString)


{
// If the connection string is null, use a default.
if(myConnectionString == "")
{
myConnectionString = "Database=Test;Data
Source=localhost;User Id=username;
}
MySqlConnection myConnection =
new MySqlConnection(myConnectionString);
string myInsertQuery = "INSERT INTO Orders (id,
customerId,amount) Values(1001, 2001,15,68);
MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
myCommand.Connection = myConnection;
myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

2.2. La clase MySqlCommand


La clase MySqlCommand representa una sentencia SQL a ejecutar
contra una base de datos MySQL.
Nota: Versiones anteriores del proveedor utilizaron el símbolo '@'
para marcar parámetros en SQL. Esto es incompatible con variables de
usuario de MySQL, de manera que el proveedor ahora utiliza el
símbolo '?' para localizar parámetros en SQL.
Para soportar código antiguo, se debe poner 'old syntax=yes' en su
cadena de conexión. Si hace estp, debe ser consciente que una
excepción no se lanzará si falla al definir un parámetro que ha
intentado usar en su SQL.

2.1.1. Propiedades
Las siguientes propiedades están disponibles:
• CommandText: Obtiene o pone la sentencia SQL a ejecutar en el
origen de datos.
• CommandTimeout: Obtiene o pone el tiempo de espera antes de
terminar el intento para ejecutar un comando y generar un error.
• CommandType: Obtiene o pone un valor indicando cómo debe ser
interpretada la propiedad CommandText. Los posibles tipos son
StoredProcedure, TableDirect, y Text.
• Connection: Obtiene o pone el MySqlConnection usado por
esta instancia del MySqlCommand.
• IsPrepared: Es true si este comando ha sido preparado, false en
caso contrario.
• Parameters: Obtiene la colección MySqlParameterCollection.
• Transaction: Obtiene o pone el MySqlTransaction dentro del
que el MySqlCommand se ejecuta.
• UpdatedRowSource: Obtiene o pone cómo los resultados del
comando serán aplicados al DataRow cuando son usados por el
método Update del DbDataAdapter.

2.1.2. Métodos
Los siguientes métodos están disponibles:

• Cancel: Intenta cancelar la ejecución de un MySqlCommand. Esta


operación no es soportada.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

• Clone: Crea un clon de este objeto MySqlCommand. Las


propiedades CommandText, Connection y Transaction están
incluìdas asì como la lista de parámetros completa.
• CreateParameter: Crea una nueva instancia de un objeto
MySqlParameter.
• Dispose: Dispone de esta instancia de MySqlCommand.
• ExecuteNonQuery: Ejecuta una sentencia SQL contra la
conexión y retorna el número de filas afectadas.
• ExecuteReader: Envía el CommandText a la Connection y
construye un MySqlDataReader.
• ExecuteScalar: Ejecuta la consulta, y retorna la primera
columna de la primera fila en el conjunto de resultados devuelto por
la consulta. Las columnas o filas extras son ignoradas.
• Prepare: Crea una versión preparada del comando sobre una
instancia del servidor MySQL.

2.1.3. Ejemplo de Uso


El siguiente ejemplo crea un MySqlCommand y un MySqlConnection.
El MySqlConnection es abierto y puesto como el Connection para el
MySqlCommand. El ejemplo luego llama ExecuteNonQuery, y cierra
la conexión. Para lograr esto, al ExecuteNonQuery se pasa una cadena
de conexión y una cadena de consulta que es una sentencia SQL
INSERT.

public void InsertRow(string myConnectionString)


{
// If the connection string is null, use a default.
if(myConnectionString == "")
{
myConnectionString = "Database=Test;Data Source=localhost;
User Id=username;}
MySqlConnection myConnection =
new MySqlConnection(myConnectionString);
string myInsertQuery =
"INSERT INTO Orders (id, customerId, amount)
Values(1001,100,150.50)”;
MySqlCommand myCommand = new MySqlCommand(myInsertQuery);
myCommand.Connection = myConnection;
myConnection.Open();
myCommand.ExecuteNonQuery();
myCommand.Connection.Close();
}

2.3. La clase MySqlDataReader


La clase MySqlDataReader proporciona un medio para leer un flujo de
filas de una base de datos sòlo-hacia-adelante.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

Para crear un MySQLDataReader, se debe llamar el método


ExecuteReader del objeto MySqlCommand, antes que usar
directamente un constructor.
Mientras el MySqlDataReader esté en uso, el MySqlConnection
asociado está ocupado sirviendo al MySqlDataReader, y ninguna otra
operación puede ser ejecutada sobre el MySqlConnection antes de
cerrarlo.
Esto se mantendrá así hasta que el método Close del
MySqlDataReader sea llamado.
IsClosed y RecordsAffected son las propiedades que se pueden llamar
despuès de que MySqlDataReader esté cerrado. La propiedad
RecordsAffected puede ser accessada en cualquier momento mientras
el MySqlDataReader exista.
Para una performance óptima, MySqlDataReader evita crear objects
innecesariamente o hacer copias innecesarias de datos. Como
resultado, múltiples llamadas a métodos, tal como GetValue retornan
una referencia al mismo objeto.
Tenga cuidado si está modificando el valor subyacente de los objetos
retornados por métodos tales como GetValue.

2.3.1. Propiedades
Las siguientes propiedades están disponibles:

• FieldCount: Obtiene el número de columnas en la fila actual.


• HasRows: Obtiene un valor indicando si el MySqlDataReader
contiene una o más filas.
• IsClosed: Obtiene un valor indicando si el data reader está cerrado.
• Item: Obtiene el valor de una columna en su formato nativo. En
C#, esta propiedad es el indexador para la clase MySqlDataReader.
• RecordsAffected: Obtiene el número de filas cambiadas,
insertadas, o eliminadas por la ejecución de la sentencia SQL.

2.3.2. Métodos
Los siguientes métodos están disponibles:
• Close: Cierra el objeto MySqlDataReader.
• GetBoolean: Obtiene el valor de la columna especificada como un
Boolean.
• GetByte: Obtiene el valor de la columna especificada como un
byte.
• GetBytes: Reads a stream of bytes from the specified column
offset into the buffer an array starting at the given buffer offset.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

• GetChar: Obtiene el valor de la columna especificada como un


solo caracter.
• GetChars: Reads a stream of characters from the specified column
offset into the buffer as an array starting at the given buffer offset.
• GetDataTypeName: Gets the name of the source data type.
• GetDateTime: Obtiene el valor de la columna especificada como
un objeto DateTime.
• GetDecimal: Obtiene el valor de la columna especificada como un
objeto Decimal.
• GetDouble: Obtiene el valor de la columna especificada como un
número de punto flotante de double-precision.
• GetFieldType: Gets the Type that is the data type of the object.
• GetFloat: Obtiene el valor de la columna especificada como un
número de punto flotante de simple-precision.
• GetGuid: Obtiene el valor de la columna especificada como un
GUID.
• GetInt16: Obtiene el valor de la columna especificada como un
16-bit signed integer.
• GetInt32: Obtiene el valor de la columna especificada como un
32-bit signed integer.
• GetInt64: Obtiene el valor de la columna especificada como un
64-bit signed integer.
• GetMySqlDateTime: Obtiene el valor de la columna especificada
como un objeto MySqlDateTime.
• GetName: Gets the name of the specified column.
• GetOrdinal: Gets the column ordinal, given the name of the
column.
• GetSchemaTable: Returns a DataTable that describes the column
metadata of the MySqlDataReader.
• GetString: Obtiene el valor de la columna especificada como un
objeto String .
• GetTimeSpan: Obtiene el valor de la columna especificada como
un objeto TimeSpan.
• GetUInt16: Obtiene el valor de la columna especificada como un
16-bit unsigned integer.
• GetUInt32: Obtiene el valor de la columna especificada como un
32-bit unsigned integer.
• GetUInt64: Obtiene el valor de la columna especificada como un
64-bit unsigned integer.
• GetValue: Obtiene el valor de la columna especificada en su
formato nativo.

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

• GetValues: Gets all attribute columns in the collection for the


current row.
• IsDBNull: Gets a value indicating whether the column contains
non-existent or missing values.
• NextResult: Advances the data reader to the next result, when
reading the results of batch SQL statements.
• Read: Advances the MySqlDataReader to the next record.

2.3.3. Ejemplos de uso


El siguiente ejemplo crea un MySqlConnection, un MySqlCommand,
y un MySqlDataReader. El ejemplo, lee a través de los datos, lo
escribe a la consola. Finalmente, el ejemplo cierra el
MySqlDataReader, luego el MySqlConnection.

public void ReadMyData(string myConnString)


{
string mySelectQuery = "SELECT OrderID, CustomerID FROM
Orders";
MySqlConnection myConnection =
new MySqlConnection(myConnString);
MySqlCommand myCommand =
new MySqlCommand(mySelectQuery,myConnection);
myConnection.Open();
MySqlDataReader myReader;
myReader = myCommand.ExecuteReader();

// Always call Read before accessing data.

while (myReader.Read())
{
Console.WriteLine(myReader.GetInt32(0) + ", " +
myReader.GetString(1));
}
// always call Close when done reading.

myReader.Close();

// Close the connection when done with it.


myConnection.Close();

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

2.4. La clase MySqlException


Esta clase es creada siempre que el provedor MySql Data encuentra un error
generado desde el servidor. Todas las conexiones abiertas no se cierran
automáticamente cuando se lanza una excepción.Si la aplicación cliente
determina que la excepción es fatal, el debe cerrar cualquier objeto
MySqlDataReader o MySqlConnection.

2.4.1. Propiedades
Las siguientes propuedades están disoponibles:
• HelpLink: Obtiene o pone un link al archivo de ayuda asociado con
esta excepción.
• InnerException: Obtiene la instancia Exception que causó la
excepción actual.
• IsFatal: True si la excepción fue fatal y causa el cierre de la
conexión, false en caso contrario.
• Message: Obtiene un mensaje que describe la excepción actual.
• Number: Obtiene un número que identifica el tipo de error.
• Source: Obtiene o pone el nombre de la aplicación o el objeto que
causa el error.
• StackTrace: Obtiene una representación string de los frames el la
pila de llamada en el momento de que la excepción actual fue lanzada.
• TargetSite: Obtiene el método que lanzó la excepción actual.

2.4.2. Métodos
La clase MySqlException no tiene métodos.

2.4.3. Ejemplo de uso


El siguiente ejemplo genera una MySqlException debido a un servidor
inexistente, y luego muestra la excepción.
public void ShowException()
{
string mySelectQuery = "SELECT column1 FROM table1";
MySqlConnection myConnection =
new MySqlConnection("Data Source=localhost;Database=Sample;");
MySqlCommand myCommand =
new MySqlCommand(mySelectQuery,myConnection);
try
{
myCommand.Connection.Open();
}
catch (MySqlException e)
{
MessageBox.Show( e.Message );
}
}

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán


Universidad Los Angeles de Chimbote Sistema de educación virtual

Curso: Tecnología .NET Docente: Ing. Héctor Fiestas Bancayán

También podría gustarte