如何在数据库中保存不同类型的文件

您所在的位置:网站首页 数据库能储存图片吗为什么 如何在数据库中保存不同类型的文件

如何在数据库中保存不同类型的文件

2024-07-16 14:25:51| 来源: 网络整理| 查看: 265

其实,向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入。以下就简单举例说明:

 

首先,在数据库中要建立相应的字段能保存Bytes,例如在SQL Server中用Image类型来定义字段。我所用到的数据库大致结构如下:

字段名

类型

备注

FileID

Int

自增字段

FileName

Varchar(256)

 

FullName

Varchar(1024)

 

FileData

Image

 

 

然后就是写入数据库,代码如下:

        FileInfo fi = new FileInfo( txtFileName.Text );// Replace with your file name

        if ( fi.Exists)

        {

            byte[] bData = null;

            int nNewFileID = 0;

            // Read file data into buffer

            using ( FileStream fs = fi.OpenRead() )

            {

                bData = new byte[fi.Length];

                int nReadLength = fs.Read( bData,0, (int)(fi.Length) );

            }

 

            // Add file info into DB

            string strQuery = "INSERT INTO FileInfo "

                + " ( FileName, FullName, FileData ) "

                + " VALUES "

                + " ( @FileName, @FullName, @FileData ) "

                + " SELECT @@IDENTITY AS 'Identity'";

            SqlCommand sqlComm = new SqlCommand( strQuery, sqlConn );

            sqlComm.Parameters.Add( "@FileName", fi.Name );

            sqlComm.Parameters.Add( "@FullName", fi.FullName );

            sqlComm.Parameters.Add( "@FileData", bData );

 

            // Get new file ID

            SqlDataReader sqlReader = sqlComm.ExecuteReader();

            if( sqlReader.Read() )

            {

                nNewFileID = int.Parse(sqlReader.GetValue(0).ToString());

            }

            sqlReader.Close();

            sqlComm.Dispose();

 

            if( nNewFileID > 0 )

            {

                // Add new item in list view

                ListViewItem itmNew = lsvFileInfo.Items.Add( fi.Name );

                itmNew.Tag = nNewFileID;

            }

        }

 

而读出的代码如下:

    // Get new file name

    string strFullName = dlgFBSave.SelectedPath;

    if( strFullName[strFullName.Length - 1] != '//' )

        strFullName += @"/";

    strFullName += lsvFileInfo.SelectedItems[0].Text;

 

    string strQuery = "SELECT FileData FROM FileInfo "

        + " WHERE FileID = " + lsvFileInfo.SelectedItems[0].Tag.ToString();

 

    SqlDataAdapter sqlDAdapter = new SqlDataAdapter(strQuery,sqlConn);

    DataSet sqlRecordSet = new DataSet();

 

    byte[] bData = null;

 

    //Get file data from DB

    try

    {

        sqlDAdapter.Fill( sqlRecordSet, "FileInfo" );

        foreach( DataRow dr in sqlRecordSet.Tables["FileInfo"].Rows)

        {

            if( dr["FileData"] != DBNull.Value )

            bData = ( byte[] )dr["FileData"];

        }

    }

    catch(SqlException sqlErr)

    {

        MessageBox.Show( sqlErr.Message );

    }

    catch

    {

        MessageBox.Show( "Failed to read data from DB!" );

    }

    sqlRecordSet.Dispose();

    sqlDAdapter.Dispose();

 

    if( bData != null )

    {

        // Save file

        FileInfo fi = new FileInfo( strFullName );

        if( !fi.Exists )

        {

            //Create the file.

            using (FileStream fs = fi.Create())

            {

                fs.Write( bData, 0, bData.Length);

            }

        }

        else

        {

            //Create the file.

            using (FileStream fs = fi.OpenWrite())

            {

                fs.Write( bData, 0, bData.Length);

            }

        }

    }

 

       不过需要提的一点,如果把大量的文件存入数据库的话,会造成数据库的臃肿,而且访问量也会增大。所以现在比较流行的做法,是把文件上传到服务器上,而在数据库上只保存文件的相对路径即可。那么访问的时候,先通过数据库得到文件的相对路径,然后再访问服务器上的文件。



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭