consulta ADO

25/08/2007 - 00:02 por Jordi Maycas | Informe spam
Hola!! Estoy haciendo esto con vc#.net 2005, y no se si es la manera
adecuada. No meda errores de compilacion ni de linker pero... ¿hay alguna
manera mejor de hacerlo? Me refiero a que es mejor ADODB, o OLEDB, y a parte
teniendo en cuenta que probablemente migre de access 2003 a sql express.

ADODB.Connection cn=new ADODB.Connection();

ADODB.Recordset res=new ADODB.Recordset();

object objAffected;

string strStatement="Select * from prueba";

string cnStr;

string fichero = "c:\\prueba.mdb ";

try

{

cnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + fichero;

cn.Open(cnStr, null, null, 0);

cn.Execute(strStatement, out objAffected, 0);

}

finally

{

cn.Close();

}

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
25/08/2007 - 16:21 | Informe spam
"Jordi Maycas" wrote in message
news:%
[...] ¿hay alguna manera mejor de hacerlo? Me refiero a que es mejor
ADODB, o OLEDB
[...]
ADODB.Connection cn=new ADODB.Connection();
[...]



El problema de ADODB es que se trata de un objeto COM, por lo que tienes
que atravesar una capa de "COM Interop" cuando lo llamas desde .Net. Si
puedes, es preferible que utilices las clases que hay en System.Data.OleDb,
que están implementadas de forma nativa en .Net. Y además cuentan con la
ventaja de que tienen soporte en el diseñador de Visual Studio.
Respuesta Responder a este mensaje
#2 Jordi Maycas
25/08/2007 - 23:28 | Informe spam
he probado con oledb, de esta manera y tampoco... compila pero me lanza un
error al ejecutarse en la linea del command.ExecuteReader(); ME dice que el
conexionproperty no ha sido inicializado.

int resultado,total;

string fichero = "..\\..\\bd1.mdb ";

string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
fichero;

OleDbConnection connection = new OleDbConnection(ConnectionString);

OleDbCommand command = new OleDbCommand("SELECT count(*) from mayoristas");

connection.Open();

OleDbDataReader myReader = command.ExecuteReader();

total=myReader.RecordsAffected;

if (myReader.HasRows==true)

{

resultado=1;

}

else

resultado=0;


connection.Close();

"Alberto Poblacion"
escribió en el mensaje news:
"Jordi Maycas" wrote in message
news:%
[...] ¿hay alguna manera mejor de hacerlo? Me refiero a que es mejor
ADODB, o OLEDB
[...]
ADODB.Connection cn=new ADODB.Connection();
[...]



El problema de ADODB es que se trata de un objeto COM, por lo que
tienes que atravesar una capa de "COM Interop" cuando lo llamas desde
.Net. Si puedes, es preferible que utilices las clases que hay en
System.Data.OleDb, que están implementadas de forma nativa en .Net. Y
además cuentan con la ventaja de que tienen soporte en el diseñador de
Visual Studio.


Respuesta Responder a este mensaje
#3 Alberto Poblacion
25/08/2007 - 23:37 | Informe spam
"Jordi Maycas" wrote in message
news:
[...] ME dice que el conexionproperty no ha sido inicializado.

[...]
OleDbConnection connection = new OleDbConnection(ConnectionString);
OleDbCommand command = new OleDbCommand("SELECT count(*) from
mayoristas");



Te falta indicarle al command cuál es la conexión que tiene que
utilizar. La forma más simple consiste en pasársela en el constructor,
cambiando la linea que has puesto por esta:

OleDbCommand command = new OleDbCommand("SELECT count(*) from mayoristas",
connection);
Respuesta Responder a este mensaje
#4 Jordi Maycas
26/08/2007 - 10:40 | Informe spam
probe,pero en total me da siempre 0, aunque hayan registros o no... y luego
en el myReader.HasRows, siempre es verdadero...


int resultado, total;

string fichero = "..\\..\\bd1.mdb ";

string ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

fichero;

OleDbConnection connection = new OleDbConnection(ConnectionString);

OleDbCommand command = new OleDbCommand("SELECT count(*) from
mayoristas",connection);

connection.Open();

OleDbDataReader myReader = command.ExecuteReader();

total = myReader.RecordsAffected;

if (myReader.HasRows == true)

{

resultado = 1;

}

else

resultado = 0;



connection.Close();

"Alberto Poblacion"
escribió en el mensaje news:
"Jordi Maycas" wrote in message
news:
[...] ME dice que el conexionproperty no ha sido inicializado.

[...]
OleDbConnection connection = new OleDbConnection(ConnectionString);
OleDbCommand command = new OleDbCommand("SELECT count(*) from
mayoristas");



Te falta indicarle al command cuál es la conexión que tiene que
utilizar. La forma más simple consiste en pasársela en el constructor,
cambiando la linea que has puesto por esta:

OleDbCommand command = new OleDbCommand("SELECT count(*) from
mayoristas", connection);


Respuesta Responder a este mensaje
#5 Alberto Poblacion
26/08/2007 - 11:37 | Informe spam
"Jordi Maycas" wrote in message
news:
probe,pero en total me da siempre 0, aunque hayan registros o no... y
luego en el myReader.HasRows, siempre es verdadero...



Lógico. Estás preguntando por el RecordsAffected, que para una consulta
de Selección siempre es cero (te da el número de registros modificados
cuando haces una consulta que contenga Insert, Update o Delete).
myReader.HasRows siempre es verdadero porque tu consulta es un Select
Count(*)..., que siempre devuelve una fila con una columna, por lo que el
resultado siempre contiene una fila (HasRows), aunque la columna de esa fila
traiga un cero.

Para obtener la cuenta de los registros tal como deseas, lo más eficiente
es usar un ExecuteScalar, pero si insistes en usar un ExecuteReader,
entonces tienes que hacerle un Read() para posicionarte en la primera fila
devuelta, y a continuación leer la primera columna de dicha fila.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida