insercion de datos

03/03/2010 - 00:52 por jdepaz | Informe spam
hola lista,

con respecto a la inserción de datos, en una BD PostgreSQL,

tengo lo siguiente para guardar los datos:


public void guardaDatos(String strUSer, String strClave,String
strDesc,String strTipo){
String strInsertSql="INSERT INTO usuario values
(@User,@Clave,@Desc,@Tipo)";
NpAdapter.InsertCommand=new
NpgsqlCommand(strInsertSql,Cnn.getConexion());
NpAdapter.InsertCommand.Parameters.Add(new
NpgsqlParameter("@User",NpgsqlTypes.NpgsqlDbType.Text));
NpAdapter.InsertCommand.Parameters.Add(new
NpgsqlParameter("@Clave",NpgsqlTypes.NpgsqlDbType.Text));
NpAdapter.InsertCommand.Parameters.Add(new
NpgsqlParameter("@Desc",NpgsqlTypes.NpgsqlDbType.Text));
NpAdapter.InsertCommand.Parameters.Add(new
NpgsqlParameter("@Tipo",NpgsqlTypes.NpgsqlDbType.Text));

NpAdapter.InsertCommand.Parameters[0].SourceColumn="username";

NpAdapter.InsertCommand.Parameters[1].SourceColumn="password";

NpAdapter.InsertCommand.Parameters[2].SourceColumn="descripcion";
NpAdapter.InsertCommand.Parameters[3].SourceColumn="tipo";
NpAdapter.Fill(dset);
DataTable tabla=dset.Tables[0];
DataRow dr=tabla.NewRow();
dr["NOMBRE"]=strUSer;
dr["password"]=strClave;
dr["DESCRIPCION"]=strDesc;
dr["TIPO"]=strTipo;
tabla.Rows.Add(dr);
NpAdapter.Update(dset, "usuario");
}


y esto para cargar los datos en un DataGridView:

public void cargarDatos(String strSQL){
NpgsqlCommand sqlComando=new
NpgsqlCommand(strSQL,Cnn.getConexion());
NpgsqlDataReader sqlLector=sqlComando.ExecuteReader();
DataTable mitabla=new DataTable();
mitabla.Load(sqlLector);
dgView.DataSource=mitabla;
sqlLector.Close();
}


public void conectToData(){
dset = new DataSet("usuario");
NpAdapter = new NpgsqlDataAdapter();
NpAdapter.SelectCommand = new NpgsqlCommand(strQuery,
Cnn.getConexion());
NpAdapter.Fill(dset, "usuario");
dtsource = dset.Tables["usuario"];
}

y esta es la variable tipo sql:

String strQuery="select username as NOMBRE, descripcion as
DESCRIPCION,"+
" tipo as TIPO from usuario;";


pero al ejecutar la inserción con los datos, me muestra el siguiente
error:


System.ArgumentException: La columna 'password' no pertenece a la
tabla usuario.
en System.Data.DataRow.GetDataColumn
en System.Data.DataRow.set_Item



Entiendo en este caso, que es por no incluir el campo "password" en el
String strQuery="select username as NOMBRE, descripcion as
DESCRIPCION,"+
" tipo as TIPO from usuario;";

Ahora bien, ¿como podria solucionar esto?
 

Leer las respuestas

#1 Leandro Tuttini
03/03/2010 - 04:47 | Informe spam
hola

no creo que sea este el problema pero note raro que has definido

NpAdapter.InsertCommand.Parameters[0].SourceColumn="username";

pero en el datatable haces

dr["NOMBRE"]=strUSer;

o sea segun veo aqui no machea los nombres

lo que no ves es como se relaciona el select que comentas en donde no
ash incluido el password y la query de insert
o sea la verdad no veo ningun vinculo


porque no pruebas algo como esto

public void guardaDatos(string strUSer, string strClave, string
strDesc, string strTipo)
{

using(NpgsqlConnection cnn = new NpgsqlConnection("connection
string"))
{
string query = @"INSERT INTO usuario (user, clave, desc, tipo)
values (@User,@Clave,@Desc,@Tipo)";

NpgsqlCommand cmd = new NpgsqlCommand(query, cnn);

cmd.Parameters.AddWithValue("@User", strUSer);
cmd.Parameters.AddWithValue("@Clave", strClave);
cmd.Parameters.AddWithValue("@Desc", strDesc);
cmd.Parameters.AddWithValue("@Tipo", strTipo);

cmd.ExecuteNonQuery();
}

}

creo que es mucho mas simple y realzia exactamente la misma funcion
aqui no usas adaptadores ni nada raro, solo el simple Command de
ado.net

Npgsql: User's Manual
http://npgsql.projects.postgresql.o...anual.html

saludos

Preguntas similares