Simulando DLookup fuera de Access (III).
En los dos posts anteriores he mostrado maneras de simular un DLookup en una base de datos MySQL mediante stored procedures y stored functions (primera aproximación y versión mejorada). No obstante, ha quedado claro que hacerlo así aunque puede resultar útil tiene sus limitaciones. Es por ello que normalmente prefiero utilizar un DLookup llevado a cabo desde la parte de la aplicación. En mi caso esto equivale a realizarlo en VisualBasic.NET. Y sin más preámbulos veamos el código de la función:
' Author: Albert Mata (www.albertmata.net)
' Date: 20080530
' Description: Function to simulate Microsoft Access DLookup.
'--------------------------------------------------------------------
Public Function DLookup(ByVal Field As String, _
ByVal Table As String, _
Optional ByVal Condition As String = "TRUE") _
As Object
Try
'Creating SQL string.
Dim SQL As String
SQL = "SELECT " & Field _
& " FROM " & Table _
& " WHERE " & Condition
'Filling dataset with desired value.
Dim DS As New DataSet
Dim DA As New MySqlDataAdapter(SQL, CONNECTION_STRING)
DA.Fill(DS, "anyname")
'Returning value or Null.
If Not IsDBNull(DS.Tables("anyname").Rows(0).Item(0)) Then
Return DS.Tables("anyname").Rows(0).Item(0)
Else
Dim X As Object = Convert.DBNull
Return X
End If
Catch
'If error happens, returning Null.
Dim X As Object = Convert.DBNull
Return X
End Try
End Function
Cabe aclarar que CONNECTION_STRING será una constante definida en algún punto de la aplicación que recogerá la cadena de conexión para nuestra base de datos. En mi caso es algo como:
Data Source = localhost; _
User ID = root; _
Password = mi_password
Relacionado con cadenas de conexión, recomendado darse un paseo por ConnectionStrings.com.
Yo estoy trabajando con una base de datos MySQL, por eso el DataAdapter es en realidad un MySqlDataAdapter, pero el funcionamiento sería análogo con cualquier otra base de datos y utilizando un objeto DataAdapter convencional. Lo único es que si se trabaja con MySQL es necesario previamente haber agregado la referencia correspondiente al proyecto, y para mayor comodidad en temas de nomenclatura importar el espacio de nombres correspondiente en la parte superior de la clase:
Respecto a la función, poco que explicar. Pasarle el campo y la tabla deseados y de manera opcional una condición en formato SQL sin el WHERE. Si no se desea condición se pueden informar sólo dos argumentos, en esta ocasión no es necesario enviar una cadena vacía ni nada por el estilo. Además, el valor que nos devuelve la función es de tipo Object, así que no tendremos ningún problema con el tipo de dato devuelto, nos admitirá cualquier tipo de campo que quiera que sea el campo en cuestión de la tabla en cuestión. En caso de producirse algún error (nombre de campo o tabla mal escritos, conexión a base de datos fallida...) o si no se halla ningún registro, la función nos devolverá un valor nulo, con lo cual desde código podremos recogerlo sin problemas y actuar en consecuencia.
Tags: .NET, bases de datos, connection string, data adapter, dlookup, MySQL, SQL, stored function, stored procedure