Parámetros IDbCommand

16/02/2005 - 12:13 por Anonimo | Informe spam
Hola, he visto que con IDbCommand y IDbDataParameter
se podría hacer algo así:

(en este caso para SqlServer)

...
SqlCommand c = new SqlCommand(sql.ToString(), con);
c.Parameters.Add(new SqlParameter("par0", id));
c.Parameters.Add(new SqlParameter("par1", title));
c.Parameters.Add(new SqlParameter("par2", type));
c.Parameters.Add(new SqlParameter("par3", pubId));
c.Parameters.Add(new SqlParameter("par4", price));
...
c.ExecuteNonQuery();


Bien, la consulta con parámetros para
System.Data.SqlClient.SqlCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5, @par6,
@par7, @par8)


Para System.Data.OleDb.OleDbCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (?, ?, ?, ?, ?, ?, ?, ?, ?)


Para Microsoft.Data.Odbc.OdbcCommand:

insert into `titles` (`title_id`, `title`, `type`,
`pub_id`, `price`, `advance`,
`ytd_sales`, `notes`, `pubdate`)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)

Para System.Data.OracleClient.OracleCommand:

INSERT INTO titles (title_id, title, type, pub_id, price,
advance,
ytd_sales, notes, pubdate)
VALUES
(:par0, :par1, :par2, :par3, :par4, :par5, :par6, :par7, :
par8)


Como veis, son distintas las SQL con parámetros.

Quisiera saber cómo puedo saber qué formato tendrá la SQL
con parámetros si quiero utilizar IDbDataParameter y
IDbCommand.

Es decir, dónde viene definido que para SqlServer, tiene
que ser con el caracter @, ejemplo:
insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5, @par6,
@par7, @par8)


Imaginad que utilizo un nuevo proveedor de BBDD, por ej,
para MySQL, que me proporcionen System.Data.MySql por
ejemplo (es decir, toda la implementación ADO.NET para
MySQL), y si quisiera utilizar IDbParameter, cómo sabría
la sintaxis específica ?.


Muchas gracias.

Preguntas similare

Leer las respuestas

#1 pablo crosio
16/02/2005 - 15:01 | Informe spam
hola!

pues la sintaxis de un motor de base de datos es bien instrinseca al motor
de base de datos.
para averiguarlo deberias consultar en la ayuda de cada motor de base de
datos..

es cierto que cada proveedor tiene su forma de especificar las sentencias a
la hora de ejecutar una consulta pero, por ejemplo, esto (para
System.Data.OleDb.OleDbCommand):

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (?, ?, ?, ?, ?, ?, ?, ?, ?)

con el proveedor OLEDB de VFP no funcionaria por ende no siempre para un
proveedor OLEDB la sentencia sera como la arriba descripta..


el problema es que estas utilizando directamente las sentencias en el codigo
en vez de por ejemplo hacerlo a traves de stored procedures en el motor de
base de datos... de esa forma te olvidas de como escribir la sentencia en c#

simplemente llamarias a un stored procedure de nombre X con su parametros...

obviamente en el motor de base de datos las sentencias serian bien diversas,
pero (en teoria), cambiando el gestor de bd no deberias cambiar el codigo en
c#

salu2!!

pablo


"" escribió:

Hola, he visto que con IDbCommand y IDbDataParameter
se podría hacer algo así:

(en este caso para SqlServer)


SqlCommand c = new SqlCommand(sql.ToString(), con);
c.Parameters.Add(new SqlParameter("par0", id));
c.Parameters.Add(new SqlParameter("par1", title));
c.Parameters.Add(new SqlParameter("par2", type));
c.Parameters.Add(new SqlParameter("par3", pubId));
c.Parameters.Add(new SqlParameter("par4", price));

c.ExecuteNonQuery();


Bien, la consulta con parámetros para
System.Data.SqlClient.SqlCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5, @par6,
@par7, @par8)


Para System.Data.OleDb.OleDbCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (?, ?, ?, ?, ?, ?, ?, ?, ?)


Para Microsoft.Data.Odbc.OdbcCommand:

insert into `titles` (`title_id`, `title`, `type`,
`pub_id`, `price`, `advance`,
`ytd_sales`, `notes`, `pubdate`)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)

Para System.Data.OracleClient.OracleCommand:

INSERT INTO titles (title_id, title, type, pub_id, price,
advance,
ytd_sales, notes, pubdate)
VALUES
(:par0, :par1, :par2, :par3, :par4, :par5, :par6, :par7, :
par8)


Como veis, son distintas las SQL con parámetros.

Quisiera saber cómo puedo saber qué formato tendrá la SQL
con parámetros si quiero utilizar IDbDataParameter y
IDbCommand.

Es decir, dónde viene definido que para SqlServer, tiene
que ser con el caracter @, ejemplo:
insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5, @par6,
@par7, @par8)


Imaginad que utilizo un nuevo proveedor de BBDD, por ej,
para MySQL, que me proporcionen System.Data.MySql por
ejemplo (es decir, toda la implementación ADO.NET para
MySQL), y si quisiera utilizar IDbParameter, cómo sabría
la sintaxis específica ?.


Muchas gracias.

Respuesta Responder a este mensaje
#2 Anonimo
16/02/2005 - 16:36 | Informe spam
Lo de utilizar Stored Procedures en lugar de directamente
las sentencias lo había considerado alguna vez, aunqe
nunca desarrollé nada al respecto.

Se supone si tienes 100 tablas, tendrías que crear tantos
Stored Procedures para Insert, Update,Delete (y
Select???); no sé si afectaría eso al rendimiento de base
de datos.
Creo yo que los Stored Procedures para Insert, Update,
Delete, Select, serían más rápidos (no sé si mucho más)
que hacer una sentencia SQL Insert, Update, Delete,
Select.

Otra cosa, es que dependiendo del Gestor de BBDD, quizá
no se soporte Stored Procedures (no sé como será en
MySQL, SQLPersassive, FireBird, MultiBase, ODBC u otras)




hola!

pues la sintaxis de un motor de base de datos es bien


instrinseca al motor
de base de datos.
para averiguarlo deberias consultar en la ayuda de cada


motor de base de
datos..

es cierto que cada proveedor tiene su forma de


especificar las sentencias a
la hora de ejecutar una consulta pero, por ejemplo, esto


(para
System.Data.OleDb.OleDbCommand):

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (?, ?, ?, ?, ?, ?, ?, ?, ?)

con el proveedor OLEDB de VFP no funcionaria por


ende no siempre para un
proveedor OLEDB la sentencia sera como la arriba


descripta..


el problema es que estas utilizando directamente las


sentencias en el codigo
en vez de por ejemplo hacerlo a traves de stored


procedures en el motor de
base de datos... de esa forma te olvidas de como


escribir la sentencia en c#

simplemente llamarias a un stored procedure de nombre X


con su parametros...

obviamente en el motor de base de datos las sentencias


serian bien diversas,
pero (en teoria), cambiando el gestor de bd no deberias


cambiar el codigo en
c#

salu2!!

pablo


"" escribió:

Hola, he visto que con IDbCommand y IDbDataParameter
se podrà­a hacer algo asà­:

(en este caso para SqlServer)


SqlCommand c = new SqlCommand(sql.ToString(), con);
c.Parameters.Add(new SqlParameter("par0", id));
c.Parameters.Add(new SqlParameter("par1", title));
c.Parameters.Add(new SqlParameter("par2", type));
c.Parameters.Add(new SqlParameter("par3", pubId));
c.Parameters.Add(new SqlParameter("par4", price));

c.ExecuteNonQuery();


Bien, la consulta con parà¡metros para
System.Data.SqlClient.SqlCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5,




@par6,
@par7, @par8)


Para System.Data.OleDb.OleDbCommand:

insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (?, ?, ?, ?, ?, ?, ?, ?, ?)


Para Microsoft.Data.Odbc.OdbcCommand:

insert into `titles` (`title_id`, `title`, `type`,
`pub_id`, `price`, `advance`,
`ytd_sales`, `notes`, `pubdate`)
values (?, ?, ?, ?, ?, ?, ?, ?, ?)

Para System.Data.OracleClient.OracleCommand:

INSERT INTO titles (title_id, title, type, pub_id,




price,
advance,
ytd_sales, notes, pubdate)
VALUES





(:par0, :par1, :par2, :par3, :par4, :par5, :par6, :par7, :
par8)


Como veis, son distintas las SQL con parà¡metros.

Quisiera saber cómo puedo saber qué formato tendrà¡




la SQL
con parà¡metros si quiero utilizar IDbDataParameter y
IDbCommand.

Es decir, dónde viene definido que para SqlServer,




tiene
que ser con el caracter @, ejemplo:
insert into [titles] ([title_id], [title], [type],
[pub_id], [price], [advance],
[ytd_sales], [notes], [pubdate])
values (@par0, @par1, @par2, @par3, @par4, @par5,




@par6,
@par7, @par8)


Imaginad que utilizo un nuevo proveedor de BBDD, por




ej,
para MySQL, que me proporcionen System.Data.MySql por
ejemplo (es decir, toda la implementación ADO.NET




para
MySQL), y si quisiera utilizar IDbParameter, cómo




sabrà­a
la sintaxis especà­fica ?.


Muchas gracias.



.

Respuesta Responder a este mensaje
#3 pablo crosio
16/02/2005 - 17:01 | Informe spam
hola!

es cierto que no todos los gestores de bd soportan SPs... de todas formas la
teoria indica que los accesos a datos se deberian realizar con un componente
de acceso a datos, el cual implementara ciertas interfases, algunos de los
metodos podrian ser EjecutarSP, EjecutarSQL, etc etc..
de esta forma solamente el componente de acceso a datos dependeria de un
motor especifico (cosa que tiene sentido) si el motor soporta SPs, los
utilizarias, sino los podrias simular, etc etc pero el componente de
negocios nunca cambiaria siempre llamaria a EjecutarSP("nombre", .)...

espero te sirva

salu2!!

pablo
"" escribió:


Lo de utilizar Stored Procedures en lugar de directamente
las sentencias lo había considerado alguna vez, aunqe
nunca desarrollé nada al respecto.

Se supone si tienes 100 tablas, tendrías que crear tantos
Stored Procedures para Insert, Update,Delete (y
Select???); no sé si afectaría eso al rendimiento de base
de datos.
Creo yo que los Stored Procedures para Insert, Update,
Delete, Select, serían más rápidos (no sé si mucho más)
que hacer una sentencia SQL Insert, Update, Delete,
Select.

Otra cosa, es que dependiendo del Gestor de BBDD, quizá
no se soporte Stored Procedures (no sé como será en
MySQL, SQLPersassive, FireBird, MultiBase, ODBC u otras)



>
>hola!
>
>pues la sintaxis de un motor de base de datos es bien
instrinseca al motor
>de base de datos.
>para averiguarlo deberias consultar en la ayuda de cada
motor de base de
>datos..
>
>es cierto que cada proveedor tiene su forma de
especificar las sentencias a
>la hora de ejecutar una consulta pero, por ejemplo, esto
(para
>System.Data.OleDb.OleDbCommand):
>
>insert into [titles] ([title_id], [title], [type],
>[pub_id], [price], [advance],
>[ytd_sales], [notes], [pubdate])
>values (?, ?, ?, ?, ?, ?, ?, ?, ?)
>
>con el proveedor OLEDB de VFP no funcionaria por
ende no siempre para un
>proveedor OLEDB la sentencia sera como la arriba
descripta..
>
>
>el problema es que estas utilizando directamente las
sentencias en el codigo
>en vez de por ejemplo hacerlo a traves de stored
procedures en el motor de
>base de datos... de esa forma te olvidas de como
escribir la sentencia en c#
>
>simplemente llamarias a un stored procedure de nombre X
con su parametros...
>
>obviamente en el motor de base de datos las sentencias
serian bien diversas,
>pero (en teoria), cambiando el gestor de bd no deberias
cambiar el codigo en
>c#
>
>salu2!!
>
>pablo
>
>
>"" escribió:
>
>> Hola, he visto que con IDbCommand y IDbDataParameter
>> se podrà­a hacer algo asà­:
>>
>> (en este caso para SqlServer)
>>
>>
>> SqlCommand c = new SqlCommand(sql.ToString(), con);
>> c.Parameters.Add(new SqlParameter("par0", id));
>> c.Parameters.Add(new SqlParameter("par1", title));
>> c.Parameters.Add(new SqlParameter("par2", type));
>> c.Parameters.Add(new SqlParameter("par3", pubId));
>> c.Parameters.Add(new SqlParameter("par4", price));
>>
>> c.ExecuteNonQuery();
>>
>>
>> Bien, la consulta con parà¡metros para
>> System.Data.SqlClient.SqlCommand:
>>
>> insert into [titles] ([title_id], [title], [type],
>> [pub_id], [price], [advance],
>> [ytd_sales], [notes], [pubdate])
>> values (@par0, @par1, @par2, @par3, @par4, @par5,
@par6,
>> @par7, @par8)
>>
>>
>> Para System.Data.OleDb.OleDbCommand:
>>
>> insert into [titles] ([title_id], [title], [type],
>> [pub_id], [price], [advance],
>> [ytd_sales], [notes], [pubdate])
>> values (?, ?, ?, ?, ?, ?, ?, ?, ?)
>>
>>
>> Para Microsoft.Data.Odbc.OdbcCommand:
>>
>> insert into `titles` (`title_id`, `title`, `type`,
>> `pub_id`, `price`, `advance`,
>> `ytd_sales`, `notes`, `pubdate`)
>> values (?, ?, ?, ?, ?, ?, ?, ?, ?)
>>
>> Para System.Data.OracleClient.OracleCommand:
>>
>> INSERT INTO titles (title_id, title, type, pub_id,
price,
>> advance,
>> ytd_sales, notes, pubdate)
>> VALUES
>>
(:par0, :par1, :par2, :par3, :par4, :par5, :par6, :par7, :
>> par8)
>>
>>
>> Como veis, son distintas las SQL con parà¡metros.
>>
>> Quisiera saber cómo puedo saber qué formato tendrà¡
la SQL
>> con parà¡metros si quiero utilizar IDbDataParameter y
>> IDbCommand.
>>
>> Es decir, dónde viene definido que para SqlServer,
tiene
>> que ser con el caracter @, ejemplo:
>> insert into [titles] ([title_id], [title], [type],
>> [pub_id], [price], [advance],
>> [ytd_sales], [notes], [pubdate])
>> values (@par0, @par1, @par2, @par3, @par4, @par5,
@par6,
>> @par7, @par8)
>>
>>
>> Imaginad que utilizo un nuevo proveedor de BBDD, por
ej,
>> para MySQL, que me proporcionen System.Data.MySql por
>> ejemplo (es decir, toda la implementación ADO.NET
para
>> MySQL), y si quisiera utilizar IDbParameter, cómo
sabrà­a
>> la sintaxis especà­fica ?.
>>
>>
>> Muchas gracias.
>>
>.
>

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