Convierta el archivo a Byte-Array, guarde en Access-DB, lea de DB y cree el archivo
Hola,
estoy tratando de
1)
byte[] bytes = System.IO.File.ReadAllBytes(@"C:\Users\user\Docs\1.pdf");
2)
AccessConnector.WriteByteArrayToID(122, bytes);
public static void WriteByteArrayToID(int aID, byte[] aFile)
{
conn.Open();
dbCommand = new OleDbCommand("UPDATE Belege SET Datei = @file WHERE(ID = @ID)", conn);
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbCommand.Parameters.Add("@file", OleDbType.VarBinary).Value = aFile.ToString();
dbDataAdapter = new OleDbDataAdapter(dbCommand);
dbCommand.ExecuteNonQuery();
conn.Close();
}
3)
DataTable table = AccessConnector.GetFileByteArrayByID(122);
DataRow row = table.Rows[0];
System.Text.UTF8Encoding enc = new System.Text.UTF8Encoding();
byte[] newbytes = enc.GetBytes(row.ItemArray[0].ToString());
4)
System.IO.File.WriteAllBytes(@"C:\Users\user\Documents\Docs\a.pdf", newbytes);
La cuestión es que los newbytes son mucho más pequeños que los bytes y no se puede acceder al nuevo archivo. En la celda de Access DB son como letras chinas. Ya intenté usar otras codificaciones. Nada. Cualquiera puede explicar por qué es mucho más pequeño (23000 caracteres a 400 caracteres). Gracias.
ACTUALIZAR Código agregado para la otra función
public static DataTable GetFileByteArrayByID(int aID)
{
conn.Open();
dbCommand = new OleDbCommand("SELECT Datei FROM Belege WHERE (ID = @ID)", conn);
dbCommand.Parameters.Add("@ID", OleDbType.Integer).Value = aID;
dbDataAdapter = new OleDbDataAdapter(dbCommand);
DataTable resultDataTable = new DataTable();
dbDataAdapter.Fill(resultDataTable);
conn.Close();
return resultDataTable;
}