Firebird y VB.Net

En este post les hablaré un poco sobre la relación de estos dos elementos que aunque muchas cosas vienen en el Intenet, no deja de ser una ayuda encontrar todo junto.

Hablamos de Firebird refiriéndonos a la Base de datos Open Source <http://www.firebirdsql.org/> y su conector para .Net <http://www.firebirdsql.org/en/net-provider/>

La instalación del servidor de bases de datos se debe adaptar a tus necesidades, es decir si lo quieres en el sabor Classic, SuperClassic o SuperServer, las diferencias están muy bien marcadas en la página de Firebird.
La instalación del componente es igual de sencilla, solo es cuestión de descargarla e instalar.

Para poder usarla en tu proyecto VB.Net hay que incluir la referencia a la DLL FirebirdSql.Data.Firebird.dll (Si instalaste usando el MSI usualmente se encuentra en c:\Archivos de Programa (ó C:\Program Files)

Ahora si viene lo bueno… como conectarse y hacer queries:

Conexión

Imports FirebirdSql.Data.FirebirdClient

dbconn = New FbConnection("User=SYSDBA;Password=masterkey;Database=C:\MIDB.FDB;DataSource=localhost;")
dbconn.Open()

Recuerda cambiar los datos específicos de tu base de datos.

Para seleccionar un dato:

Dim query As New FbCommand("SELECT IDTEXT, SVALUE FROM GENSETTINGS", dbconn)
Dim dr As FbDataReader = query.ExecuteReader()
While dr.Read()
  Dim SETTING = dr("IDTEXT")
  Dim VALUE = dr("SVALUE")
End While

Para insertar/actualizar/eliminar un dato:
¡OJO! Para insertar, actualizar o eliminar un dato, forzosamente necesitas iniciar y cerrar una transacción.

Dim addDetailsTransaction As FbTransaction = dbconn.BeginTransaction()
Dim query As New FbCommand("INSERT INTO JOBS_REBOUND (ID, JOBID, STAMP) VALUES (0, 10, 'NOW')", dbconn, addDetailsTransaction)
query.UpdatedRowSource = System.Data.UpdateRowSource.Both
Dim ENQ = query.ExecuteNonQuery()
If ENQ = 1 Then
 'Satisfactoria
 addDetailsTransaction.Commit()
Else
 'Hubo un error
 addDetailsTransaction.Rollback()
End If
addDetailsTransaction.Dispose()

Para insertar un registro en Firebird regresando el ID creado
Hay que crear un parámetro de salida llamado RET_ID y anexarlo en el query.

Dim addDetailsTransaction As FbTransaction = dbconn.BeginTransaction()
Dim query As New FbCommand("INSERT INTO JOBS_REBOUND (ID, JOBID, STAMP) VALUES (0,10,'NOW') RETURNING ID", dbconn, addDetailsTransaction)
query.UpdatedRowSource = System.Data.UpdateRowSource.Both
Dim param2 = query.CreateParameter()
param2.ParameterName = "RET_ID"
param2.FbDbType = FirebirdSql.Data.FirebirdClient.FbDbType.Integer
param2.Direction = System.Data.ParameterDirection.Output
query.Parameters.Add(param2)
Dim a = query.ExecuteNonQuery()
If a = 1 Then
  Dim allok = True
  For Each attri As Rechazo.SampleAtt In Me.Attributos
    Dim query2 As New FirebirdSql.Data.FirebirdClient.FbCommand("INSERT INTO JOBS_REB_SAMPLE (ID, REBOUNDID, ATTID, SAMPLE) VALUES (0, " & param2.Value.ToString() & ", " & attri.ATTID & ", " & attri.SAMPLE & ")", dbconn, addDetailsTransaction)
    Dim result As Integer = query2.ExecuteNonQuery()
    If result = 1 Then

    Else
       allok = False
    End If
 Next
 addDetailsTransaction.Commit()
Else
 addDetailsTransaction.Rollback()
End If
addDetailsTransaction.Dispose()

Espero les sirva este pequeño compendio, muchas de las verificaciones fueron omitidas para simplificar el ejemplo, pero debes tener en cuenta que siempre la conexión debe estar abierta, debes cerrarlas de igual manera.

Author: Miguel González López

Software Engineer

6 thoughts on “Firebird y VB.Net”

  1. Muy bueno!, me ha servido de mucho, gracias!.

    Una pregunta, sabrás como administrar usuarios de FB desde .NET?, ejemplo cambiar un password de un usuario de FB

  2. Muy bien lo que aportas, en cuanto pueda probare las conexiones, y las aplicaciones de los query gracias.

  3. Exelente aporte, muchas gracias por la publicacion, me sirvio mucho.

    Saludos.

  4. Me ha ayudado bastante muchas gracias, solo tengo una duda…. Tengo un Delete para borrar todos los datos de una tabla pero no lo ejecuta, ¿Podría ser que de algún modo esta librería tenga alguna restricción para la eliminación masiva de datos de una tabla?

    “DELETE FROM INVE01 WHERE CVE_ARTnull”

  5. Como veo la query, posiblemente sea error en la condición WHERE, NULL no es un valor normal es un indicador que el campo está “indefinido” por lo que el comparador debe ser “WHERE CVE_ART IS NULL”.

    Si esto lo tienes correcto y no te regresa algún error, revisa que la query esté en una transacción, si no se hace en una transacción se eliminan los datos pero en un espacio virtual, por lo que vas a necesitar hacer un COMMIT a la transacción para que se reflejen en la base de datos.

    Por último, revisa que el usuario tenga los permisos necesarios, que esto te lo debe regresar en un error de SQL.

    Saludos

Leave a Reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.