[ Foro de C# ]
....hola estoy intentando conectar una aplicacion de visual C# a sql server 2012.
use
SqlConnection cn = new SqlConnection("Data Source=NATALIA\\SQLEXPRESS;Initial Catalog=MydbNueva;Integrated Security=SSPI");
cn.Open();
para conectarla y funciona porque puedo ver desde la aplicacion los datos que estan en la base de datos a travez de un metodo que creee, el problema que se me presenta es al quererr insertar datos desde la aplicacion a la base de datos,
este es el metodo que uso para insertar los datos
private int insertUsuario()
{
int resultado;
SqlCommand ad = new SqlCommand(string.Format("insert into Usuario"+numericUpDown1.Value+","+TXBUsuario.Text+","+TXBContraseña.Text+""),cn);
resultado = ad.ExecuteNonQuery();
return resultado;
}
quisiera saber como es en verdad para insertar los datos en la base de datos, desde ya muchas gracias.
naty
Hazlo en dos pasos: primero guarda la sentencia SQL en una cadena de texto y luego crea un SqlCommand a partir de ella.
Así podrás comprobar si la sintaxis de tu SQL es correcta (que a mí me parece que no lo es, porque no veo paréntesis, ni comillas alrededor de los valores de texto, ni la palabra VALUES...)
es verdad, bueno lo cambie por este, pero tampoco me funciona
private void agregarusuarios()
{
SqlCommand s = cn.CreateCommand();
s.CommandText = "insert Usuario (id,usuario,password,nombre,apellido,direccion,telefono,dni) values(@id,@usuario,@password,@nombre,@apellido,@direccion,@telefono,@dni)";
SqlParameter pid = new SqlParameter("@id", SqlDbType.Int);
pid.Value = NUPDid_usuario.Value;
s.Parameters.Add(pid);
SqlParameter pusuario = new SqlParameter("@usuario", SqlDbType.VarChar);
pusuario.Value = txbusuario.Text;
s.Parameters.Add(pusuario);
SqlParameter ppass = new SqlParameter("@password", SqlDbType.NChar);
ppass.Value=password.Text;
s.Parameters.Add(ppass);
SqlParameter pnombre = new SqlParameter("@nombre", SqlDbType.VarChar);
pnombre.Value = txbnombre.Text;
s.Parameters.Add(pnombre);
SqlParameter papellido = new SqlParameter("@apellido", SqlDbType.VarChar);
papellido.Value = txbapellido.Text;
s.Parameters.Add(papellido);
SqlParameter pdireccion = new SqlParameter("@direccion", SqlDbType.VarChar);
pdireccion.Value = txbdirecccion.Text;
s.Parameters.Add(pdireccion);
SqlParameter ptelefono = new SqlParameter("@telefono", SqlDbType.VarChar);
ptelefono.Value = txbdirecccion.Text;
s.Parameters.Add(ptelefono);
SqlParameter pdni = new SqlParameter("@dni", SqlDbType.VarChar);
pdni.Value = txbdni.Text;
s.Parameters.Add(pdni);
s.ExecuteNonQuery();
}
La sintaxis de SQL sigue siendo incorrecta: no es "insert Usuario" sino "insert into Usuario"
Gracias :D ya lo solucione, ahora tengo duda sobre como modificar .
probe con esto
SqlCommand s =new SqlCommand(string.Format("UPDATE Empleados SET [Nombre] = @Nombre ,[Apellido] =@Apellido,[Telefono] = @Telefono,[Direccion] =@Direccion,[Dni] =@Dni,[Cargo] =@Cargo WHERE IdEmpleado=@Id"));
cn.Open();
s.CommandText = "Execute sp_modificar_empleado @Id, @nombre,@apellido,@direccion,@telefono,@dni, @cargo";
s.Parameters.Add("@Id", SqlDbType.Int).Value = id;
s.Parameters.Add("@Nombre", SqlDbType.VarChar, 50).Value = txtNombre.Text;
s.Parameters.Add("@Apellido", SqlDbType.VarChar, 50).Value = txtApellido.Text;
s.Parameters.Add("@Direccion", SqlDbType.VarChar, 50).Value = txtDireccion.Text;
s.Parameters.Add("@Telefono", SqlDbType.VarChar, 50).Value = msktxbTelefono.Text;
s.Parameters.Add("@Dni", SqlDbType.VarChar, 50).Value = mskTextboxDni.Text;
s.Parameters.Add("@Cargo", SqlDbType.VarChar, 50).Value = txbCargo.Text;
s.ExecuteNonQuery();
pero no me funciona
¿Cual es el mensaje de error que obtienes? En un primer vistazo, veo un parámetro "id" que no estás usando realmente.
ya lo solucione gracias! te hago una consulta, si tengo una tabla que tiene una clave foranea, como hago para agregar desde c# datos en las dos tablas y que la clave foranea sea = a la primaria de la otra tabla?
hay alguna forma de obtener en c# el ultimo id de un data grid?
Si tienes un campo id y son números correlativos, puedes hacer una nueva consulta con SELECT MAX(id) FROM ..., pero no deja de ser peligroso, porque si borras un dato intermedio quizá tu gestor de bases de datos reutilice ese ID (que ya no sería el mayor de todos).
La "forma infalible" ya no depende de SQL sino del gestor de bases de datos que estés utilizando. Por ejemplo, en MySQL, que el que yo más uso, tienes LAST_INSERT_ID().
uso sql server 2012 osea que la consulta seria
select last_insert_id from empleados?
No, esa es sintaxis de MySQL.
Yo no uso SQL Server, pero he leído que quizá te sirviera esto:
INSERT INTO tabla (campo1, campo2)
OUTPUT INSERTED.ID
VALUES(@campo1, @campo2)
...
int newId = (int) miOrdenSQL.ExecuteScalar();
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)