Este sistema trabaja con una base de datos, tiene un login, un formulario principal, inventario, categoría, usuarios y cambiar contraseña, en cada formulario puedes realizar el mantenimiento de los datos, buscar, registrar, modificar y eliminar.
¿Cómo funciona?
EL LOGIN esta validado para permitir el ingreso solo a los usuarios registrados en la base de datos.

El formulario principal se hizo con FORMULARIOS ISMDICONTAINER contiene los formularios inventario, categoría, usuarios y cambiar contraseña.

Formulario inventario puedes realizar el mantenimiento (registrar, modificar y eliminar) de un producto y buscar el producto por nombre y/o categoría.
Al registrar un producto se agrega de inmediato a lista de los productos.

Puedes modificar, eliminar un producto al presionar en su fila o también buscar un producto.

Formulario categoría puedes realizar el mantenimiento de una categoría y buscar la categoría por código y/o nombre. No se puede eliminar una categoría porque la tabla de productos depende del código de las categorías.

Formulario usuario puedes realizar mantenimiento y brindar permisos a los usuarios, al crear un nuevo usuario su contraseña será igual que su nick de usuario, por lo que deberá de cambiar al iniciar sesión.

Solo hay 2 tipo de permisos usuario y administrador. El usuario no puede ingresar al formulario Usuarios.

El formulario cambiar contraseña, el usuario solo debe de ingresar su nueva contraseña y cambiar.
¿Cómo iniciar?
CREATE DATABASE [VaiInventario123] GO USE [VaiInventario123] GO CREATE TABLE [dbo].[Categoria]( [IdCategoria] [varchar](5) NOT NULL, [Nombre] [varchar](50) NULL, CONSTRAINT [PK_Categoria] PRIMARY KEY CLUSTERED ( [IdCategoria] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Permisos]( [IdPermisos] [varchar](5) NULL, [TipoPermiso] [varchar](50) NULL ) ON [PRIMARY] GO CREATE TABLE [dbo].[Productos]( [Codigo] [varchar](5) NOT NULL, [Nombre] [varchar](50) NULL, [IdCategoria] [varchar](5) NULL, [Precio] [decimal](16, 2) NULL, [Stock] [int] NULL, CONSTRAINT [PK_Productos] PRIMARY KEY CLUSTERED ( [Codigo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO CREATE TABLE [dbo].[Usuarios]( [Codigo] [varchar](5) NOT NULL, [Nombre] [varchar](50) NULL, [Correo] [varchar](50) NULL, [Usuario] [varchar](50) NULL, [Password] [varchar](50) NULL, [IdPermisos] [varchar](5) NULL, CONSTRAINT [PK_Usuarios] PRIMARY KEY CLUSTERED ( [Codigo] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, OPTIMIZE_FOR_SEQUENTIAL_KEY = OFF) ON [PRIMARY] ) ON [PRIMARY] GO ALTER TABLE [dbo].[Productos] WITH CHECK ADD CONSTRAINT [FK_Productos_Categoria] FOREIGN KEY([IdCategoria]) REFERENCES [dbo].[Categoria] ([IdCategoria]) GO ALTER TABLE [dbo].[Productos] CHECK CONSTRAINT [FK_Productos_Categoria] GO
Procedimientos almacenados.
Use VaiInventario123 go --Login-- create proc vai_logueo @usuario varchar(50), @clave varchar(50) as select Nombre,Usuario,Password,IdPermisos,Codigo from Usuarios where usuario=@usuario and Password=@clave go --Listar categoria-- create proc vai_listar_categoria as select '' as IdCategoria,'--Seleccione--' as Nombre union all select * from Categoria go ------------PRODUCTOS------------ --Listar productos-- create proc vai_buscar_productos @nombre varchar(50), @idcategoria varchar(5) as select Codigo,pro.Nombre,pro.IdCategoria as idcategoria,cat.Nombre as Categoria, Precio,Stock from Productos pro,Categoria cat where pro.IdCategoria=cat.IdCategoria and pro.nombre like @nombre + '%' and pro.IdCategoria like @idcategoria + '%' go --Registrar productos--- create proc vai_nuevo_producto @nombre varchar(50), @idcategoria varchar(5), @precio money, @stock int as declare @codigonuevo varchar(5) set @codigonuevo= (select MAX(Codigo) from Productos) set @codigonuevo= 'P' + RIGHT ('0000' + LTRIM (right(isnull(@codigonuevo,'0000'),4)+1),4) insert into Productos values (@codigonuevo,@nombre,@idcategoria,@precio,@stock) go --Elimina productos--- create proc vai_eliminar_producto @codigo varchar(5) as delete from Productos where Codigo=@codigo go --Modificar productos--- create proc vai_modificar_producto @codigo varchar(5), @nombre varchar(50), @idcategoria varchar(5), @precio money, @stock int as update Productos set Nombre=@nombre,IdCategoria=@idcategoria,Precio=@precio,Stock=@stock where Codigo=@codigo go ------------CATEGORIA------------ --Buscar categoria-- create proc vai_buscar_categoria @idcategoria varchar(5), @nombre varchar(50) as select IdCategoria,Nombre from Categoria where IdCategoria like @idcategoria + '%' and Nombre like @nombre + '%' go --Registrar categoria--- create proc vai_nueva_categoria @nombre varchar(50) as declare @codnuevocat varchar(5) set @codnuevocat= (select MAX(IdCategoria) from Categoria) set @codnuevocat= 'C' + RIGHT ('0000' + LTRIM (right(isnull(@codnuevocat,'0000'),4)+1),4) insert into Categoria values (@codnuevocat,@nombre) go --Modificar categoria--- create proc vai_modificar_categoria @codigo varchar(5), @nombre varchar(50) as update Categoria set Nombre=@nombre where IdCategoria=@codigo go ------------USUARIOS------------ --Buscar usuarios-- create proc vai_buscar_usuarios @nombre varchar(50) as select codigo,Nombre,Correo,Usuario,per.IdPermisos,per.TipoPermiso from Usuarios usu,Permisos per where usu.IdPermisos=per.IdPermisos and Nombre like @nombre + '%' go --Nuevo usuarios-- create proc vai_nuevo_usuario @nombre varchar(50), @correo varchar(5), @usuario varchar(50), @permiso varchar(5) as declare @codigonuevo varchar(5) set @codigonuevo= (select MAX(Codigo) from Usuarios) set @codigonuevo= 'A' + RIGHT ('0000' + LTRIM (right(isnull(@codigonuevo,'0000'),4)+1),4) insert into Usuarios values (@codigonuevo,@nombre,@correo,@usuario,@usuario,@permiso) go --Modificar usuarios-- create proc vai_modificar_usuario @codigo varchar(5), @nombre varchar(50), @correo varchar(50), @permiso varchar(5) as update Usuarios set Nombre=@nombre,IdPermisos=@permiso,Correo=@correo where Codigo=@codigo go create proc vai_eliminar_usuario @codigo varchar(5) as delete from Usuarios where Codigo=@codigo go ------------PERMISOS------------ create proc vai_listar_permisos as select '' as idpermisos,'--Seleccione--' as Permiso union all select * from Permisos go ------------RESETEAR PASSWORD------------ create proc vai_reset_pass @codigo varchar(5) as update Usuarios set Password=Usuario where Codigo=@codigo go ------------CAMBIAR PASSWORD------------ create proc vai_pass @codigo varchar(5), @clavenueva varchar(50) as update Usuarios set Usuarios.Password=@clavenueva where Codigo=@codigo go
Llenar datos (Opcional), recuerda que algunas tablas están enlazadas por lo que los datos tienen que coincidir, por ejemplo el código de categoría esta enlazado con una columna de la tabla productos.
Use VaiInventario123 go --Insertar datos de usuarios-- --B0001 = ADMIN --B0002 = USUARIO insert into Usuarios values('A0001','VaidrollTeam','correo@gmail.com','admin','admin','B0001') insert into Usuarios values('A0002','Usuario2','correo2@gmail.com','admin2','admin2','B0001') insert into Usuarios values('A0003','Usuario3','correo3@gmail.com','usu1','usu1','B0002') insert into Usuarios values('A0004','Usuario4','correo4@gmail.com','usu2','usu2','B0002') insert into Usuarios values('A0005','Usuario5','correo5@gmail.com','usu3','usu3','B0002') insert into Usuarios values('A0006','Usuario6','correo6@gmail.com','usu4','usu4','B0002') select * from Usuarios go --Insertar datos de permisos-- insert into Permisos values('B0001','Administrador') insert into Permisos values('B0002','Usuario') --Insertar datos de categorias-- insert into Categoria values('C0001','Categoria1') insert into Categoria values('C0002','Categoria2') insert into Categoria values('C0003','Categoria3') insert into Categoria values('C0004','Categoria4') insert into Categoria values('C0005','Categoria5') insert into Categoria values('C0006','Categoria6') insert into Categoria values('C0007','Categoria7') insert into Categoria values('C0008','Categoria8') insert into Categoria values('C0009','Categoria9') insert into Categoria values('C0010','Categoria10') select * from Categoria go --Insertar datos de productos-- insert into Productos values('P0001','Producto1','C0001','12.00',10) insert into Productos values('P0002','Producto2','C0002','6.00',6) insert into Productos values('P0003','Producto3','C0003','4.00',20) insert into Productos values('P0004','Producto4','C0004','20.00',42) insert into Productos values('P0005','Producto5','C0005','90.00',2) insert into Productos values('P0006','Producto6','C0006','30.00',65) insert into Productos values('P0007','Producto7','C0001','47.00',2) insert into Productos values('P0008','Producto8','C0005','41.00',4) insert into Productos values('P0009','Producto9','C0003','26.00',1) insert into Productos values('P0010','Producto10','C0001','31.00',8) insert into Productos values('P0011','Producto11','C0010','64.00',16) insert into Productos values('P0012','Producto12','C0009','85.00',74) insert into Productos values('P0013','Producto13','C0008','95.00',30) insert into Productos values('P0014','Producto14','C0007','16.00',5) insert into Productos values('P0015','Producto15','C0004','3.00',8) insert into Productos values('P0016','Producto16','C0002','8.00',54) insert into Productos values('P0017','Producto17','C0001','7.00',10) insert into Productos values('P0018','Producto18','C0003','14.00',16) insert into Productos values('P0019','Producto19','C0010','64.00',2) insert into Productos values('P0020','Producto20','C0006','38.00',8) select * from Productos go --------------------------------
En el proyecto > Class1, puedes encontrar la conexión, tienes que modificar con el nombre del servidor de tu SQL Server.
Dim cnx As New SqlConnection("server=localhost\SQLEXPRESS;integrated security=true;Database=VaiInventario123")

Una vez creado la base de datos, los procedimientos almacenados, agregar data y modificar la conexión, recién funcionará el proyecto.
ClassLibrary1, contiene toda las funciones para la comunicación entre el SQL Server y el Visual Studio 2019.
img, contiene los iconos y el fondo.
VaidrollTeamWindowsApp1, contiene los formularios.
Errores y soluciones
S: La base de datos no esta creada o el nombre esta mal escrito en la cadena de conexión.
E: System.Data.SqlClient.SqlException: 'Error relacionado con la red o específico de la instancia mientras se establecía una conexión con el servidor SQL Server...
S: Debes de modificar el server en la cadena de conexión con el nombre de tu SQL SERVER, el mío es "server=localhost\SQLEXPRESS" el tuyo posiblemente sea "localhost", ".","el nombre de tu pc", etc.
Este proyecto es una versión básica de un sistema y te puede ser muy útil si recién estas iniciando o si estas practicando.

Recuerda

- Visual Studio 2019
- Microsoft SQL Server Management Studio 18