[ Foro de C# ]

conexion a base de datos

08-Dec-2014 12:07
Invitado (Naty)
9 Respuestas

....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


08-Dec-2014 13:52
Nacho Cabanes (+83)

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...)


11-Dec-2014 13:30
Invitado (Naty)

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();
}




11-Dec-2014 18:28
Nacho Cabanes (+83)

La sintaxis de SQL sigue siendo incorrecta: no es "insert Usuario" sino "insert into Usuario"


22-Dec-2014 14:44
Invitado (Naty)

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


26-Dec-2014 14:52
Nacho Cabanes (+83)

¿Cual es el mensaje de error que obtienes?  En un primer vistazo, veo un parámetro "id" que no estás usando realmente.


27-Dec-2014 13:48
Invitado (naty)

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?


02-Jan-2015 11:14
Nacho Cabanes (+83)

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().


03-Jan-2015 17:45
Invitado (naty)

uso sql server 2012 osea que la consulta seria

select last_insert_id from empleados?


07-Jan-2015 15:45
Nacho Cabanes (+83)

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.)