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.
 

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.

Preguntas similares