Uso de IDbConnection, IDbCommand, IDbDataAdapter etc.

22/01/2006 - 21:30 por enorso | Informe spam
Tengo una aplicación de acceso a datos que comunica OLEDB con bases access.
Ahora me gustaría mejorarla en VB2005 y prepararla para conectar con bases
de datos mas potentes, de tal forma que con un mínimo de cambio de codigo
pudiera conectar con sqlserver, oracle, mysql etc. sin tener tres
aplicaciones distintas.
Despues de mucho buscar y leer documentación he visto el empleo de los
interfaces IDbConnection, IDbCommand, IDbDataAdapter etc. Despues de pegarme
con todo esto he llegado ha un punto en el que estoy atascado.
En el codigo siguiente expongo como suelo configurar los DataAdapter para el
acceso a datos y como estoy intentando configurar el IDbDataAdapter.
Perdonar si resulta un poco
pesado.

Gracias por todo


CONEXION OLEDB

Friend WithEvents cmdSelect1 As New OleDbCommand
Friend WithEvents cmdInsert1 As New OleDbCommand
Friend WithEvents cmdUpdate1 As New OleDbCommand
Friend WithEvents cmdDelete1 As New OleDbCommand
Friend WithEvents DataAdapter1 As New OleDbDataAdapter

'DELETECOMMAND
cmdDelete1.CommandText = "DELETE FROM instal WHERE (idinst = ? OR ?
ISNULL AND idinst ISNULL) AND (nombreinst = ? OR ? IS NULL AND nombreinst IS
NULL)"
cmdDelete1.Connection = ConexData

cmdDelete1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("Original_idinst",
System.Data.OleDb.OleDbType.VarWChar, 2,
System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte),
"idinst", System.Data.DataRowVersion.Original, Nothing))

cmdDelete1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("Original_idinst1",
System.Data.OleDb.OleDbType.VarWChar, 2,
System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte),
"idinst", System.Data.DataRowVersion.Original, Nothing))

cmdDelete1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("Original_nombreinst",
System.Data.OleDb.OleDbType.VarWChar, 40,
System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte),
"nombreinst", System.Data.DataRowVersion.Original, Nothing))

cmdDelete1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("Original_nombreinst1",
System.Data.OleDb.OleDbType.VarWChar, 40,
System.Data.ParameterDirection.Input, False, CType(0, Byte), CType(0, Byte),
"nombreinst", System.Data.DataRowVersion.Original, Nothing))

Me.DataAdapter1.DeleteCommand = Me.cmdDelete1


'UPDATECOMMAND
cmdUpdate1.CommandText = "UPDATE instal SET idinst = ?, nombreinst =
? WHERE (idinst = ? OR ? IS NULL AND idinst IS NULL) AND (nombreinst = ? OR ?
IS NULL AND nombreinst IS NULL)"
cmdUpdate1.Connection = ConexData
cmdUpdate1.Parameters.Add(etc...)
cmdUpdate1.Parameters.Add(etc...)
cmdUpdate1.Parameters.Add(etc...)
cmdUpdate1.Parameters.Add(etc...)
cmdUpdate1.Parameters.Add(etc...)
Me.DataAdapter1.UpdateCommand = Me.cmdUpdate1

'SELECTCOMMAND
cmdSelect1.CommandText = "SELECT idinst, nombreinst FROM instal
WHERE instal.nombreinst IS NOT NULL ORDER BY idinst"
cmdSelect1.Connection = ConexData
Me.DataAdapter1.SelectCommand = Me.cmdSelect1

'INSERTCOMMAND
cmdInsert1.CommandText = "INSERT INTO instal(idinst, nombreinst)
VALUES (?, ?)"
cmdInsert1.Connection = ConexData
cmdInsert1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("idinst",
System.Data.OleDb.OleDbType.VarWChar, 2, "idinst"))
cmdInsert1.Parameters.Add(New
System.Data.OleDb.OleDbParameter("nombreinst",
System.Data.OleDb.OleDbType.VarWChar, 40, "nombreinst"))
Me.DataAdapter1.InsertCommand = Me.cmdInsert1


CONEXION IDb...

Public ConexData As IDbConnection
Public ConexSQLserver As New SqlConnection(ConexStrSQLserver)
Public ConexMySQL As New MySqlConnection(ConexStrMySQL)
Public ConexOracle As New OracleConnection(ConexStrOracle)

Friend WithEvents cmdSelect1 As IDbCommand
Friend WithEvents cmdInsert1 As IDbCommand
Friend WithEvents cmdUpdate1 As IDbCommand
Friend WithEvents cmdDelete1 As IDbCommand
Friend WithEvents DataAdapter1 As IDbDataAdapter

If proveedor = "SqlServer" Then
ConexData = ConexSQLserver
End if

If proveedor = "MySql" Then
ConexData = ConexMySql
End if

If proveedor = "Oracle" Then
ConexData = ConexOracle
End if

'DELETECOMMAND
cmdDelete1.CommandText = "DELETE FROM instal WHERE (idinst = ? OR ?
IS NULL AND idinst ISNULL) AND (nombreinst = ? OR ? IS NULL AND nombreinst IS
NULL)"
cmdDelete1.Connection = ConexData
cmdDelete1.Parameters.Add.??????
cmdDelete1.Parameters.Add.??????
cmdDelete1.Parameters.Add.??????
cmdDelete1.Parameters.Add.???????
Me.DataAdapter1.DeleteCommand = Me.cmdDelete1

'UPDATECOMMAND
cmdUpdate1.CommandText = "UPDATE instal SET idinst = ?, nombreinst =
? WHERE (idinst = ? OR ? IS NULL AND idinst IS NULL) AND (nombreinst = ? OR ?
IS NULL AND nombreinst IS NULL)"
cmdUpdate1.Connection = ConexData
cmdUpdate1.Parameters.Add..??????
cmdUpdate1.Parameters.Add..??????
cmdUpdate1.Parameters.Add.??????
cmdUpdate1.Parameters.Add.?????
cmdUpdate1.Parameters.Add.??????
cmdUpdate1.Parameters.Add..???????
Me.DataAdapter1.UpdateCommand = Me.cmdUpdate1

'SELECTCOMMAND
cmdSelect1.CommandText = "SELECT idinst, nombreinst FROM instal
WHERE instal.nombreinst IS NOT NULL ORDER BY idinst"
cmdSelect1.Connection = ConexData
Me.DataAdapter1.SelectCommand = Me.cmdSelect1

'INSERTCOMMAND
cmdInsert1.CommandText = "INSERT INTO instal(idinst, nombreinst)
VALUES (?, ?)"
cmdInsert1.Connection = ConexData
cmdInsert1.Parameters.Add.???????
cmdInsert1.Parameters.Add..???????
Me.DataAdapter1.InsertCommand = Me.cmdInsert1

El problema como se puede ver está a la hora de definir los ""Parameters""
de los IDbCommand para poder configurar el IDbDataAdapter.
Tampoco descarto el estar enfocando mal desde el principio este tema
 

Leer las respuestas

#1 enorso
23/01/2006 - 13:20 | Informe spam
Ante todo agradecerte el tiempo que te has tenido que tomar.
Intentare digerir esto que me cuentas para ver si sigo con la idea inicial o
me centro solo en sqlserver.

Muchas gracias

Preguntas similares