Hola, gente. Estoy desarrollando una aplicación para mi proyecto fin de carrera con Visual Studio y me he quedado totalmente estancado en algo que en teoría no debería ser tan difícil, así que vengo aquí a ver si me podéis echar una mano Voy a intentar poneros en situación lo mejor que pueda:
La aplicación tiene como objetivo principal la gestión de empleados de una pequeña empresa. En su parte más básica, se trata de insertar y actualizar la información de los empleados.
He creado una clase "Empleados", con su área de datos y funciones observadoras y modificadoras. Es decir, en el área de datos podríamos encontrar cosas como:
- double sueldo;
- string poblacion;
y en los metodos, funciones como:
- public void CambiaSueldo(double nuevosueldo) { sueldo = nuevosueldo } - public void CambiaPoblacion(string nuevapoblacion) { poblacion = nuevapoblacion }
- public double VerSueldo () { return sueldo }
- public string VerPoblacion () { return poblacion }[/b]
Todo muy standard.
También, tengo creada una clase "BasedeDatos", donde estan los métodos para insertar o actualizar la información de dichos empleados:
//Método que nos permite conectarnos a la base de datos
- public OleDbConnection ConexBD() {
string connection = ("Provider=Microsoft.ACE.OleDB.12.0; Data Source=.\BasedeDatos.accdb" );
OleDbConnection conex = null;
try { conex = new OleDbConnection(connection); } catch (Exception ex) { MessageBox.Show("No se ha podido establecer conexión con la base de datos: \n" + ex); } return conex; }[/i]
Así, con los ejemplos anteriores de Sueldo y Poblacion, tendríamos algo como esto dentro del método para insertar un empleado en la base de datos (dentro de la clase "BasedeDatos" ):
public void InsertaEmpleado(Empleado e) {
OleDbConnection conexion = ConexBD(); //Conectamos con la base de datos
OleDbCommand inserta = null;
string sqlinsert = "INSERT INTO Empleados (Sueldo, Poblacion) VALUES (@sueldo, @poblacion)";
inserta = new OleDbCommand(sqlinsert, conexion);
inserta.Parameters.Add(new OleDbParameter("@poblacion", OleDbType.VarChar));
inserta.Parameters["@poblacion"].Value = e.VerPoblacion();
inserta.Parameters.Add(new OleDbParameter("@sueldo", OleDbType.Double));
inserta.Parameters["@sueldo"].Value = e.VerSueldo();
}
He resaltado en negrita lo verdaderamente importante de mi consulta. Y es que además de esos datos, hay muchísimos más, de tipo string, double, int o incluso date. Y no he tenido mayores problemas con ninguno, excepto cuando intento guardar un archivo de imagen en la base de datos b[/b].
Lo he intentado declarando una variable fotografia en "Empleados" como object fotografia; (porque en teoría es un objecto OLE) y añadiendo este código en "BasedeDatos" :
inserta.Parameters.Add(new OleDbParameter("@foto", OleDbType.VarBinary));
inserta.Parameters["@foto"].Value = d.VerFotografia();
pero cuando voy a insertar me da este error: "El objeto debe implementar IConvertible".
No sé si es que tengo que declarar la variable foto como otro tipo, o si directamente no se pueden guardar imágenes en la base de datos y hay que guardar el enlace o algo así. Por eso me preguntaba si alguien sabría que puedo hacer para insertar una foto manteniendo un poco el orden en el código. Es decir, implementarlo dentro de la clase "basededatos" y no por ejemplo desde el form donde selecciono la imagen.
Sé que puede resultar un poco lioso, espero haberme explicado lo mejor posible.
Un saludo y muchas gracias por adelantado. Toda ayuda es bienvenida.