Escolar Documentos
Profissional Documentos
Cultura Documentos
->Developers->Null
Desarrolladores apuntando a Null
Hello world!
Autonumricos en Oracle
Nota: no es el objetivo de este post la creacin de ficheros Word desde cdigo C#. Podis usar para ello la
automatizacin Word, o componentes de terceros como los publicados por Aspose, que son excelentes.
Vamos a crear una tabla simple en SQL Server para alojar los documentos. Para este ejemplo, la
llamaremos DocsBinarios, y tendr la siguiente estructura:
Campo
DocId
Documento
NombreDoc
Tipo
Int (identity)
Image
VarChar(100)
Nulos?
No
No
No
Tambin es bastante autoexplicativo: un simple INSERT INTO que recibe como parmetros un Image y un
VarChar
Y ste es el mtodo que guarda los datos en la base de datos:
privatevoid GuardarFicheroBDD(string sRuta, string sFichero)
{
//CreamosunnuevoobjetodetipoFileStreamparaleerelfichero
//Wordenmodobinario
System.IO.FileStreamfs =new FileStream(sRuta+sFichero,
System.IO.FileMode.Open);
//Creamosunarraydebytesparaalmacenarlosdatosledosporfs.
Byte[]data =newbyte[fs.Length];
//Yguardamoslosdatosenelarraydata
fs.Read(data, 0,Convert.ToInt32(fs.Length));
//Abrimosunaconexion.Enestecasolosdatosdelacadenade
//conexionalabasededatos se recuperan de una seccin del
//ficheroweb.configmediante ConfigurationSettings
SqlConnectioncnn =
new SqlConnection(ConfigurationSettings.AppSettings["conexionBD"]);
cnn.Open();
//CreamosuncomandodetipoStoredProcedureparainvocara
//UploadDocs
SqlCommandcmd =new SqlCommand(UploadDoc,cnn);
cmd.CommandType = CommandType.StoredProcedure;
//Aadimoslosparametrosesperadosylosvaloresdelosmismos
cmd.Parameters.Add(@doc,data); //losdatosdelficheroWord
cmd.Parameters.Add(@nombre,sFichero); //ysunombre
//Ejecutamoselprocedimientoalmacenado,queinsertaunnuevo
//registroenDocsBinarios conlosdatosquequeremosintroducir
cmd.ExecuteNonQuery();
//Cerramoslaconexinyelfichero
cnn.Close();
fs.Close();
}
Colorized by: CarlosAg.CodeColorizer
Ahora veamos el mtodo para recuperar esos datos de la base de datos y mostrarlos como un fichero
Word:
privatevoid LeerDeBD()
{
//Abrimoslaconexion,exactamenteigualqueantes
SqlConnectioncnn =
new SqlConnection(ConfigurationSettings.AppSettings["conexionBD"]);
cnn.Open();
//Esteeselcomandoqueabreelregistroquedeseamos.Paraeste
//ejemploabrimossiempreelprimer registro,habraquemodificar
// estecdigo paraqueelmtodorecibieracomoparmetroel
//registroquequeremosabrir,claro.
SqlCommandcomm =new SqlCommand(SELECT*FROMDocsBinarios +
WHEREdocId=1,cnn);
comm.CommandType = CommandType.Text;
SqlDataAdapterda =new SqlDataAdapter(comm);
DataSetds =new DataSet(Binarios);
da.Fill(ds);
//Creamosunarraydebytesquecontienelosbytesalmacenados
//enelcampoDocumento delatabla
byte[]bits = ((byte[])(ds.Tables[0].Rows[0].ItemArray[1]));
cnn.Close();
//Vamosaguardaresearraydebytescomounficheroenel
//discoduro,unfichero temporalquedespussepodrdescartar.
//Paraevitarproblemasdeconcurrencia deusuarios,
//generamosunnombrenicoparaelmismo
string sFile = tmp +GenerarNombreFichero()+ .doc;
//CreamosunnuevoFileStream,queestavezservirpara
//crearunfichero conelnombreespecificado
FileStreamfs =new FileStream(Server.MapPath(.)+
@\DocsGenerados\ +sFile,FileMode.Create);
//Yescribimosendiscoelarraydebytesqueconforman
//elficheroWord
fs.Write(bits, 0,Convert.ToInt32(bits.Length));
fs.Close();
//Paramostrarelfichero,utilizamosunafuncin
//JavaScriptllamada mostrarFichero(quelonicoque
//haceescargarelficheroespecificado)
//yhacemosqueseejecuteenunpop-up.
string script = <scriptlanguaje=javascript>;
script+= mostrarFichero(DocsGenerados/ +sFile+ );
script+= </script> +Environment.NewLine;
Page.RegisterStartupScript(mostrarFichero,script);
}
Colorized by: CarlosAg.CodeColorizer
Y listo. Mediante ste ltimo mtodo el fichero Word se carga desde la base de datos y se muestra en un
popup y en todo su esplendor.
Para que tengis el cdigo completo, sta es la funcin JavaScript que carga el fichero generado desde
base de datos:
<scriptlanguage=javascript>
function mostrarFichero(destino){
window.open(destino,null,directories=no,height=600,
width=800,left=0,top=0,location=no,menubar=yes,
status=no,toolbar=yes,resizable=yes)
document.forms(0).submit();
}
</script>
Colorized by: CarlosAg.CodeColorizer
Y ste el mtodo GenerarNombreFichero(), que utiliza la cuenta de ticks del servidor para crear
nombres cuasi nicos de fichero.
privatestring GenerarNombreFichero()
{
int ultimoTick = 0;
while(ultimoTick==Environment.TickCount)
{
System.Threading.Thread.Sleep(1);
}
ultimoTick=Environment.TickCount;
return DateTime.Now.ToString(yyyyMMddhhmmss)+ . +
ultimoTick.ToString();
}
Colorized by: CarlosAg.CodeColorizer
Like this:
This entry was posted on July 2, 2008 at 1:24 pm and is filed under .net. You can follow any responses to this entry through the
RSS 2.0 feed. You can leave a response, or trackback from your own site.
Todo perfectamente explicado el ejemplo muy prctico, sigo esperando mas posts
3. Julia Says:
oye bro! y cmo le hago para (luego de recuperarlo) guardar ese archivo en una ubicacin local??
6. bpbrainiak Says:
@XoKo!
hola que tal, mira fijate bien en el codigo hay un metodo que se llama LeerDeBD() y otro que se
llama mostrarFichero() de js que te permite hacer ese trabahjo
7. XoKo! Says:
en mi caso estoy haciendo pruebas con archivos dll y exe y funciona correctamente!
Grax!
8. El Principito Says:
esta muy bueno este post, una consulta tendras de la forma en asp
10. bpbrainiak Says:
hola eureka, no lamentablemente no lo tengo, ya que hace ya varios aos que no programo en asp
old school
11. william Says:
hola, antes de guardar el archivo no es necesario escanearlo por si viene con virus?
bpbrainiak Says:
Estimado, si el monitor de virus de tu antivirus analiza los archivos al momento de crearlos, este
deberia bloquear el acceso a el (por ende el programa fallar) y mantener tu sistema sano,
pero eso ya es alcance del administrador del server
Saludos Ulises Ruz Puga
while(true) {yo.Programo(this)}
12. implantacion erp Says:
implantacion erp
[...]Guardar Archivos Binarios en SQL Server ->Developers->Null[...]
13. cms dle Says:
cms dle
[...]Guardar Archivos Binarios en SQL Server ->Developers->Null[...]
14. julian Says:
como puedo realizar el mismo procedimiento, pero en vb.net 2008 para adjuntar los documentos y
poder recuperarlos
Gracias por la atencion prestada.
16. nelson mateo Says:
amigo como , yo lo que necesito es el cdigo para poder insertar una imagen a mi db sql 2005 en
visual web developer c#, ya puedo cargar a un directorio de mi disco, pero me gustara cargarla a mi
base de datos, para cargar la imagen al directorio de mi disco utilizo FileUpload1
bpbrainiak Says:
bueno puedes basarte en el codigo que esta ahi para poder recuperar tus datos desde tu base
de datos y para guardarla, si lees bien el cdigo casi se explica solo
saludos!
Enviado de mi dispositivo tecnolgico super secreto eehh no
Por que as nos ha mandado el seor diciendo: te he puesto para luz de los gentiles, a fin de
que seas para salvacin hasta lo ultimo de la tierra (Hechos 13:47)
17. soins chiropratiques Sherbrooke Says:
May 1, 2014 at 10:51 am | Reply
Leave a Reply
Follow ->Developers->Null
Get every new post delivered to your Inbox.
Enter your email address
Sign me up
Powered by WordPress.com
%d bloggers like this: