原文:
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; }
用数据库保存文件不宜过大,本例只是测试文件保存和读取,实际项目中不建议保存图片或者文件到数据库,一般就保存到服务器,把文件的路径保存到数据库就行了。
下面这图是数据库查询结果;
从数据库导出的文件也和原文件一样。