Actualización muy simple.

21/12/2004 - 19:12 por Salvador Ramos | Informe spam
Hola a todos:

Quiero hacer un proceso muy simple, que irá en una aplicación de consola y
que será ejecutad periódicamente desde una tarea programada.

Lo que tengo que hacer es lo siguiente. Tengo una tabla (MiTabla) en la que
hay un campo C1 al que quiero aplicar un algoritmo de encriptación, ya tengo
hecha una función Encriptar() a la que le paso como parámetro el string a
encriptar y me lo devuelve encriptado.

Cual sería la forma más sencilla (qué objetos ado.net debo utilizar, e
incluso si me podéis facilitar algo de código mucho mejor, ya que llevo más
de un año sin utilizar ado.net) de resolver el siguiente proceso (os paso el
algoritmo):

InicioPrograma
AbrirConexion
Posicionarme en el primer registro
Mientras hay registros
C1 = Encriptar(C1)
LeerSiguiente
Fin
CerrarConxion
Fin Programa

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

Preguntas similare

Leer las respuestas

#1 Salvador Ramos
21/12/2004 - 19:17 | Informe spam
Perdón, se me olvidó comentar que es una base de datos Access.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Salvador Ramos" escribió en el
mensaje news:
Hola a todos:

Quiero hacer un proceso muy simple, que irá en una aplicación de consola y
que será ejecutad periódicamente desde una tarea programada.

Lo que tengo que hacer es lo siguiente. Tengo una tabla (MiTabla) en la


que
hay un campo C1 al que quiero aplicar un algoritmo de encriptación, ya


tengo
hecha una función Encriptar() a la que le paso como parámetro el string a
encriptar y me lo devuelve encriptado.

Cual sería la forma más sencilla (qué objetos ado.net debo utilizar, e
incluso si me podéis facilitar algo de código mucho mejor, ya que llevo


más
de un año sin utilizar ado.net) de resolver el siguiente proceso (os paso


el
algoritmo):

InicioPrograma
AbrirConexion
Posicionarme en el primer registro
Mientras hay registros
C1 = Encriptar(C1)
LeerSiguiente
Fin
CerrarConxion
Fin Programa

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?


Respuesta Responder a este mensaje
#2 SqlRanger
22/12/2004 - 08:58 | Informe spam
Hola Salva,

La verdad es que para hacer eso en una base de datos de Access es más
eficiente y sencillo usar ADO classic o DAO que usar ADO.NET. Con ADO
classic lo mejor en este caso sería usar un recordset de servidor de
conjunto de claves y con DAO un recordset de tipo table.

En ADO.NET necesitas tener dos conexiones abiertas, una para el datareader y
otra para ejecutar el comando de actualización. Es más eficiente actualizar
con un recordset de servidor (en Access) que ejecutar una serie de
instrucciones UPDATE.

A pesar de todo, y aunque yo lo haría con ADO classic te voy a decir como
hacerlo con ADO.NET:

Sub EncriptarTabla()
Dim cn1 As New OleDbConnection('Cadena de conexión')
Dim cn2 As New OleDbConnection('Cadena de conexión')
Dim cmdLeer as New OleDbCommand("SELECT Id, C1 FROM Tabla", cn1)
Dim cmdActualizar As New OleDbCommand("UPDATE Tabla SET C1 = ? WHERE
Id=?", cn2)
cmdActualizar.Parameters.Add("C1", tipo, longitud)
cmdActualizar.Parameters.Add("Id", tipo, longitud )
cn1.Open()
cn2.Open()
Dim reader As IDataReader = cmdLeer.ExecuteReader()
While Reader.Read()
cmdActualizar.Parameters("C1") = Encriptar(reader("C1"))
cmdActualizar.Parameters("Id") = reader("Id")
cmdActualizar.ExecuteNonQuery()
End While
reader.Close()
cn1.Close()
cn2.Close()
End Sub

Saludos:

Jesús López
MVP



"Salvador Ramos" escribió en el
mensaje news:Onmz#
Perdón, se me olvidó comentar que es una base de datos Access.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"Salvador Ramos" escribió en el
mensaje news:
> Hola a todos:
>
> Quiero hacer un proceso muy simple, que irá en una aplicación de consola


y
> que será ejecutad periódicamente desde una tarea programada.
>
> Lo que tengo que hacer es lo siguiente. Tengo una tabla (MiTabla) en la
que
> hay un campo C1 al que quiero aplicar un algoritmo de encriptación, ya
tengo
> hecha una función Encriptar() a la que le paso como parámetro el string


a
> encriptar y me lo devuelve encriptado.
>
> Cual sería la forma más sencilla (qué objetos ado.net debo utilizar, e
> incluso si me podéis facilitar algo de código mucho mejor, ya que llevo
más
> de un año sin utilizar ado.net) de resolver el siguiente proceso (os


paso
el
> algoritmo):
>
> InicioPrograma
> AbrirConexion
> Posicionarme en el primer registro
> Mientras hay registros
> C1 = Encriptar(C1)
> LeerSiguiente
> Fin
> CerrarConxion
> Fin Programa
>
> Un saludo
> Salvador Ramos
> Murcia - España
> [Microsoft MVP SQL Server]
> www.helpdna.net
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
>


Respuesta Responder a este mensaje
#3 SqlRanger
22/12/2004 - 09:06 | Informe spam
Perdón, lo he escrito directamente en el mensaje y he cometido un error,
debería ser

While Reader.Read()
cmdActualizar.Parameters("C1").Value = Encriptar(reader("C1"))
cmdActualizar.Parameters("Id").Value = reader("Id")
cmdActualizar.ExecuteNonQuery()
End While


"SqlRanger" escribió en el mensaje
news:#
Hola Salva,

La verdad es que para hacer eso en una base de datos de Access es más
eficiente y sencillo usar ADO classic o DAO que usar ADO.NET. Con ADO
classic lo mejor en este caso sería usar un recordset de servidor de
conjunto de claves y con DAO un recordset de tipo table.

En ADO.NET necesitas tener dos conexiones abiertas, una para el datareader


y
otra para ejecutar el comando de actualización. Es más eficiente


actualizar
con un recordset de servidor (en Access) que ejecutar una serie de
instrucciones UPDATE.

A pesar de todo, y aunque yo lo haría con ADO classic te voy a decir como
hacerlo con ADO.NET:

Sub EncriptarTabla()
Dim cn1 As New OleDbConnection('Cadena de conexión')
Dim cn2 As New OleDbConnection('Cadena de conexión')
Dim cmdLeer as New OleDbCommand("SELECT Id, C1 FROM Tabla", cn1)
Dim cmdActualizar As New OleDbCommand("UPDATE Tabla SET C1 = ? WHERE
Id=?", cn2)
cmdActualizar.Parameters.Add("C1", tipo, longitud)
cmdActualizar.Parameters.Add("Id", tipo, longitud )
cn1.Open()
cn2.Open()
Dim reader As IDataReader = cmdLeer.ExecuteReader()
While Reader.Read()
cmdActualizar.Parameters("C1") = Encriptar(reader("C1"))
cmdActualizar.Parameters("Id") = reader("Id")
cmdActualizar.ExecuteNonQuery()
End While
reader.Close()
cn1.Close()
cn2.Close()
End Sub

Saludos:

Jesús López
MVP



"Salvador Ramos" escribió en el
mensaje news:Onmz#
> Perdón, se me olvidó comentar que es una base de datos Access.
>
> Un saludo
> Salvador Ramos
> Murcia - España
> [Microsoft MVP SQL Server]
> www.helpdna.net
> ¿Te interesa participar en las reuniones
> del grupo de Usuarios de SQL-Server y .NET
> Se harán en levante de España, (Alicante o Murcia)?
>
> "Salvador Ramos" escribió en el
> mensaje news:
> > Hola a todos:
> >
> > Quiero hacer un proceso muy simple, que irá en una aplicación de


consola
y
> > que será ejecutad periódicamente desde una tarea programada.
> >
> > Lo que tengo que hacer es lo siguiente. Tengo una tabla (MiTabla) en


la
> que
> > hay un campo C1 al que quiero aplicar un algoritmo de encriptación, ya
> tengo
> > hecha una función Encriptar() a la que le paso como parámetro el


string
a
> > encriptar y me lo devuelve encriptado.
> >
> > Cual sería la forma más sencilla (qué objetos ado.net debo utilizar, e
> > incluso si me podéis facilitar algo de código mucho mejor, ya que


llevo
> más
> > de un año sin utilizar ado.net) de resolver el siguiente proceso (os
paso
> el
> > algoritmo):
> >
> > InicioPrograma
> > AbrirConexion
> > Posicionarme en el primer registro
> > Mientras hay registros
> > C1 = Encriptar(C1)
> > LeerSiguiente
> > Fin
> > CerrarConxion
> > Fin Programa
> >
> > Un saludo
> > Salvador Ramos
> > Murcia - España
> > [Microsoft MVP SQL Server]
> > www.helpdna.net
> > ¿Te interesa participar en las reuniones
> > del grupo de Usuarios de SQL-Server y .NET
> > Se harán en levante de España, (Alicante o Murcia)?
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Salvador Ramos
22/12/2004 - 11:39 | Informe spam
Muchas gracias Jesús.
Finalmente he implementado la solución con una sola conexión, utilizando
DataAdapter, DataTable y DataRow, con una solución que me ha pasado Eladio.

En cuanto a rendimiento no hay problemas, ya que quiero actualizar un sólo
campo de una tabla con unos cientos de filas, que nadie está utilizando, y
además se ejecuta el proceso de madrugada.

Con ADO lo he hecho muchas veces y sé que es más simple, pero ni para cosas
tan simples quiero seguir arrastrando algo que no sea .NET, prefiero
escribir unas líneas más de código, ya que en total todo el proyecto no
llega a las 50 líneas de código (incluido todo el proceso más la rutina de
encriptación) y compilado ocupa 8Kb :-)

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿Te interesa participar en las reuniones
del grupo de Usuarios de SQL-Server y .NET
Se harán en levante de España, (Alicante o Murcia)?

"SqlRanger" escribió en el mensaje
news:%
Perdón, lo he escrito directamente en el mensaje y he cometido un error,
debería ser

While Reader.Read()
cmdActualizar.Parameters("C1").Value = Encriptar(reader("C1"))
cmdActualizar.Parameters("Id").Value = reader("Id")
cmdActualizar.ExecuteNonQuery()
End While


"SqlRanger" escribió en el mensaje
news:#
> Hola Salva,
>
> La verdad es que para hacer eso en una base de datos de Access es más
> eficiente y sencillo usar ADO classic o DAO que usar ADO.NET. Con ADO
> classic lo mejor en este caso sería usar un recordset de servidor de
> conjunto de claves y con DAO un recordset de tipo table.
>
> En ADO.NET necesitas tener dos conexiones abiertas, una para el


datareader
y
> otra para ejecutar el comando de actualización. Es más eficiente
actualizar
> con un recordset de servidor (en Access) que ejecutar una serie de
> instrucciones UPDATE.
>
> A pesar de todo, y aunque yo lo haría con ADO classic te voy a decir


como
> hacerlo con ADO.NET:
>
> Sub EncriptarTabla()
> Dim cn1 As New OleDbConnection('Cadena de conexión')
> Dim cn2 As New OleDbConnection('Cadena de conexión')
> Dim cmdLeer as New OleDbCommand("SELECT Id, C1 FROM Tabla", cn1)
> Dim cmdActualizar As New OleDbCommand("UPDATE Tabla SET C1 = ? WHERE
> Id=?", cn2)
> cmdActualizar.Parameters.Add("C1", tipo, longitud)
> cmdActualizar.Parameters.Add("Id", tipo, longitud )
> cn1.Open()
> cn2.Open()
> Dim reader As IDataReader = cmdLeer.ExecuteReader()
> While Reader.Read()
> cmdActualizar.Parameters("C1") = Encriptar(reader("C1"))
> cmdActualizar.Parameters("Id") = reader("Id")
> cmdActualizar.ExecuteNonQuery()
> End While
> reader.Close()
> cn1.Close()
> cn2.Close()
> End Sub
>
> Saludos:
>
> Jesús López
> MVP
>
>
>
> "Salvador Ramos" escribió en el
> mensaje news:Onmz#
> > Perdón, se me olvidó comentar que es una base de datos Access.
> >
> > Un saludo
> > Salvador Ramos
> > Murcia - España
> > [Microsoft MVP SQL Server]
> > www.helpdna.net
> > ¿Te interesa participar en las reuniones
> > del grupo de Usuarios de SQL-Server y .NET
> > Se harán en levante de España, (Alicante o Murcia)?
> >
> > "Salvador Ramos" escribió en el
> > mensaje news:
> > > Hola a todos:
> > >
> > > Quiero hacer un proceso muy simple, que irá en una aplicación de
consola
> y
> > > que será ejecutad periódicamente desde una tarea programada.
> > >
> > > Lo que tengo que hacer es lo siguiente. Tengo una tabla (MiTabla) en
la
> > que
> > > hay un campo C1 al que quiero aplicar un algoritmo de encriptación,


ya
> > tengo
> > > hecha una función Encriptar() a la que le paso como parámetro el
string
> a
> > > encriptar y me lo devuelve encriptado.
> > >
> > > Cual sería la forma más sencilla (qué objetos ado.net debo utilizar,


e
> > > incluso si me podéis facilitar algo de código mucho mejor, ya que
llevo
> > más
> > > de un año sin utilizar ado.net) de resolver el siguiente proceso (os
> paso
> > el
> > > algoritmo):
> > >
> > > InicioPrograma
> > > AbrirConexion
> > > Posicionarme en el primer registro
> > > Mientras hay registros
> > > C1 = Encriptar(C1)
> > > LeerSiguiente
> > > Fin
> > > CerrarConxion
> > > Fin Programa
> > >
> > > Un saludo
> > > Salvador Ramos
> > > Murcia - España
> > > [Microsoft MVP SQL Server]
> > > www.helpdna.net
> > > ¿Te interesa participar en las reuniones
> > > del grupo de Usuarios de SQL-Server y .NET
> > > Se harán en levante de España, (Alicante o Murcia)?
> > >
> > >
> >
> >
>
>


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida