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ó:

Mostrar la cita
#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)



Mostrar la cita
instrinseca al motor
Mostrar la cita
motor de base de
Mostrar la cita
especificar las sentencias a
Mostrar la cita
(para
Mostrar la cita
ende no siempre para un
Mostrar la cita
descripta..
Mostrar la cita
sentencias en el codigo
Mostrar la cita
procedures en el motor de
Mostrar la cita
escribir la sentencia en c#
Mostrar la cita
con su parametros...
Mostrar la cita
serian bien diversas,
Mostrar la cita
cambiar el codigo en
Mostrar la cita
@par6,
Mostrar la cita
price,
Mostrar la cita
(:par0, :par1, :par2, :par3, :par4, :par5, :par6, :par7, :
Mostrar la cita
la SQL
Mostrar la cita
tiene
Mostrar la cita
@par6,
Mostrar la cita
ej,
Mostrar la cita
para
Mostrar la cita
sabrà­a
Mostrar la cita
#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ó:

Mostrar la cita
Ads by Google
Search Busqueda sugerida