真爱无限的知识驿站

学习积累技术经验,提升自身能力

.Net向sql server数据库保存图片或者其他小文件

测试用sql server数据库保存图片或者其他小文件。

文件流字段用varbinary类型。

        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            AsposeHelper ah = new AsposeHelper();
            //ah.extractImagesToFiles();
            //bool success=RegHelper.SetData("test\a\a1","a1name","name_a111");
            //string data= RegHelper.GetData("test\a\a1","");
            //bool success = RegHelper.RemoveKey("", "test");
            DbHelper db = new DbHelper();
            string FilePath = @"F:360data重要数据桌面测试";//目录
            string FileName = "001.txt";//要存到数据库的文件
            byte[] FileData = File.ReadAllBytes(FilePath + FileName);
            string Type1 = DateTime.Now.ToString("yyyyMMddHHmmss");
            string Type2 = Guid.NewGuid().IsNull("").Replace("-", "");
            if (FileData.LongLength < 10485760)
            {
                SqlParameter[] param = new SqlParameter[]{
                new SqlParameter("Type1",Type1),
                new SqlParameter("Type2",Type2),
                new SqlParameter("ImageName",FileName),
                new SqlParameter("ImageSize",GetFileSize(FileData.LongLength)),
                new SqlParameter("ImageData",FileData)
                };
                ////写入
                db.ExecuteNonQuery("insert into SystemImage([Type1],[Type2],[ImageName],[ImageSize],[ImageData]) values(@Type1,@Type2,@ImageName,@ImageSize,@ImageData)", param);
            }
            else
            {
                throw new Exception("文件不能大于10M");
            }
            FileData = null;
            //Application.Run(new Form1());
            ////查询,保存为文件
            DataRow dr = db.ExecuteDataRow("select * from SystemImage where imageName='展会平台首页 - 副本.jpg'");
            byte[] data = (byte[])dr["ImageData"];
            FileStream fs = new FileStream(@"F:360data重要数据桌面" + dr["ImageName"], FileMode.Create);
            //FileStream fs = new FileStream(@"F:360data重要数据桌面" + "1.txt", FileMode.Create);
            fs.Write(data, 0, data.Length);
            fs.Dispose();
            /*
            ---Sql server建表
            CREATE TABLE [dbo].[SystemImage](
                [Type1] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
                [Type2] [nvarchar](50) COLLATE Chinese_PRC_CI_AS NOT NULL,
                [ImageName] [nvarchar](200) COLLATE Chinese_PRC_CI_AS NOT NULL,
                [ImageSize] [nvarchar](20) COLLATE Chinese_PRC_CI_AS NULL,
                [ImageData] [varbinary](max) NOT NULL
            )
             */
        }
        public static string GetFileSize(long length)
        {
            string len = "";
            if (length > 1048576)//大于1M
            {
                len = string.Format("{0:f2}MB", ((decimal)length) / 1048576M);
            }
            else if (length > 1024)//大于1M
            {
                len = string.Format("{0:f2}KB", ((decimal)length) / 1024M);
            }
            else
            {
                len = string.Format("{0:f2}B", length);
            }
            return len;
        }


用数据库保存文件不宜过大,本例只是测试文件保存和读取,实际项目中不建议保存图片或者文件到数据库,一般就保存到服务器,把文件的路径保存到数据库就行了。

下面这图是数据库查询结果;

从数据库导出的文件也和原文件一样。


发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

Powered By Z-BlogPHP 1.7.3

Copyright 2024-2027 pukuimin Rights Reserved.
粤ICP备17100155号