Sentencia INSERT con parámetros hacia Access me falla

05/02/2009 - 18:33 por TioCar | Informe spam
¡Hola!


Tengo la siguiente sentencia Insert que se debe aplicar a una base de datos
de Access

INSERT INTO SOCIOS
(DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico)
VALUES (?, ?, ?, ?, ?, ?)


¿Pueden indicarme que hago mal?. Como puedo identificar los ? con
nombres de parámetro?.

gracias!

Preguntas similare

Leer las respuestas

#1 alskare
05/02/2009 - 22:42 | Informe spam
INSERT INTO SOCIOS (DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico) VALUES (@DNI, @Direccion, @Telefono, @PerteneceAPI, @IdCasa,
@IdTecnico)


"TioCar" escribió en el mensaje
news:
¡Hola!


Tengo la siguiente sentencia Insert que se debe aplicar a una base de
datos de Access

INSERT INTO SOCIOS
(DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico)
VALUES (?, ?, ?, ?, ?, ?)


¿Pueden indicarme que hago mal?. Como puedo identificar los ? con
nombres de parámetro?.

gracias!
Respuesta Responder a este mensaje
#2 Alberto Poblacion
06/02/2009 - 09:12 | Informe spam
"TioCar" wrote in message
news:
Tengo la siguiente sentencia Insert que se debe aplicar a una base de
datos de Access

INSERT INTO SOCIOS
(DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico)
VALUES (?, ?, ?, ?, ?, ?)

¿Pueden indicarme que hago mal?. Como puedo identificar los ? con
nombres de parámetro?.



Si estás usando el proveedor normal de OleDb, los parámetros se añaden
en el mismo orden en que están en la sentencia. El nombre que les pongas al
asignarles el valor da igual:

string sentencia = "INSERT INTO SOCIOS (DNI, Direccion, Telefono,
PerteneceAPI, IdCasa, IdTecnico) VALUES (?, ?, ?, ?, ?, ?)";
OleDbCommand cmd = new OleDbCommand(sentencia, conexion);
cmd.Parameters.AddWithValue("p1", dni);
cmd.Parameters.AddWithValue("p2", direc);
cmd.Parameters.AddWithValue("p3", tlf);
cmd.Parameters.AddWithValue("p4", pert);
cmd.Parameters.AddWithValue("p5", idC);
cmd.Parameters.AddWithValue("p6", idT);
conexion.Open();
cmd.ExecuteNonQuery();
conexion.Close();

Si añades los parámetros usando "AddWithValue" como en el ejemplo anterior,
asegúrate de que los "value", que en el ejemplo anterior vienen
representados por variables hipotéticas (dni, direc, etc.), tienen los tipos
correctos (string, int, etc.) para que coincidan con el tipo del campo en la
base de datos.
Respuesta Responder a este mensaje
#3 TioCar
06/02/2009 - 09:41 | Informe spam
Hola!

Yo estaba utilizando tableAdapters, pero finalmente lo he realizado como me
indicas y va bien, gracias!
Respuesta Responder a este mensaje
#4 TioCar
06/02/2009 - 09:42 | Informe spam
Gracias por tu ayuda, pero en ACCESS los parámetros no se pasan con @, sino
con ?,

Mi problema venía porque al colocar la consulta en un tableAdapter (por
comodidad) se volvía un poco *loca* y cambiaba el orden de los parámetros
además de no funcionar.

gracias!

"alskare" escribió en el mensaje de
noticias:#
INSERT INTO SOCIOS (DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico) VALUES (@DNI, @Direccion, @Telefono, @PerteneceAPI, @IdCasa,
@IdTecnico)


"TioCar" escribió en el mensaje
news:
¡Hola!


Tengo la siguiente sentencia Insert que se debe aplicar a una base de
datos de Access

INSERT INTO SOCIOS
(DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico)
VALUES (?, ?, ?, ?, ?, ?)


¿Pueden indicarme que hago mal?. Como puedo identificar los ? con
nombres de parámetro?.

gracias!




Respuesta Responder a este mensaje
#5 alskare
06/02/2009 - 21:57 | Informe spam
Nunca te acostarás sin saber una cosa más.
Se puede definir el nombre de los parámetros, pero realmente no vale para
nada definirlos con el nombre. Intento explicarme.

Toda la vida, tanto en VB6 como en .Net, he definido siempre los parámetros
de Access al estilo de SQL Server. Supongo que, al ser un chico ordenadito,
nunca se me había ocurrido "alterar" el orden de los parámetros, pero he
estado haciendo la misma prueba tanto en VB como en C# y el resultado es el
mismo:

using System.Data.OleDb;

namespace PruebasCShare
{
class Program
{
static void Main(string[] args)
{

string PathBase = @"C:\Documents and Settings\Jesús
Velasco\Escritorio\BaseEjemplo.accdb";
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=" + PathBase + ";Persist Security Info=False;";
OleDbConnection cn = new OleDbConnection(strConn);
OleDbCommand cmd = new OleDbCommand("Insert Into
Tabla(campo1,campo2) VALUES(@campo1,@campo2)",cn);

cmd.Parameters.AddWithValue("@campo2", "valor2");
cmd.Parameters.AddWithValue("@campo1", "valor1");

cn.Open();
cmd.ExecuteNonQuery();
cn.Close();
}
}
}

Le repampinfla el nombre del parámetro.Tanto en VB como en C#, el resultado
en las tablas es :
Campo1 = valor2
Campo2 = valor1...

Así que, aunque se pueda hacer con nombres de parámetros, pues ala... es más
sencillo de escribir ? que @nombreCampo. La única ventaja que le veo es por
si hay que pasar después a SQL Server... Juraría que ahí sí que hace caso al
nombre del parámetro, pero ya lo dudo... Ahora me has picado el gusanillo y
después de la cena lo pruebo en un momento.. jeje






"TioCar" escribió en el mensaje
news:
Gracias por tu ayuda, pero en ACCESS los parámetros no se pasan con @,
sino con ?,

Mi problema venía porque al colocar la consulta en un tableAdapter (por
comodidad) se volvía un poco *loca* y cambiaba el orden de los parámetros
además de no funcionar.

gracias!

"alskare" escribió en el mensaje de
noticias:#
INSERT INTO SOCIOS (DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico) VALUES (@DNI, @Direccion, @Telefono, @PerteneceAPI, @IdCasa,
@IdTecnico)


"TioCar" escribió en el mensaje
news:
¡Hola!


Tengo la siguiente sentencia Insert que se debe aplicar a una base de
datos de Access

INSERT INTO SOCIOS
(DNI, Direccion, Telefono, PerteneceAPI, IdCasa,
IdTecnico)
VALUES (?, ?, ?, ?, ?, ?)


¿Pueden indicarme que hago mal?. Como puedo identificar los ? con
nombres de parámetro?.

gracias!




Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida