日期:2014-05-17  浏览次数:20573 次

SQL 插入图片 高分求
一般方法是 存图片路径 
现在需求是插入图片  图片数据为接收的BYTE流
数据量较大 每秒 10张 JPEG图   200KB/张
有什么好的方法 将图片数据插入到数据库中
考虑数据库性能问题

分不够 再给
------解决方案--------------------
如果你非要这样做,可能按照业务来做分区表(2005以后才有)会减轻I/O上的负担。并把分区表分别分开放到物理磁盘,进一步缓解I/O压力。
------解决方案--------------------
另外把数据库恢复模式换成大容量日志(简单也可以,但是正式环境就别用简单了)。前端程序最好预处理一下,在数据库就直接插入,别做太多转换工作。
------解决方案--------------------
单独整个固态硬盘吧 把图片表放这里 应该问题不大。
------解决方案--------------------
USE AdventureWorks2008R2;
GO
CREATE TABLE myTable(FileName nvarchar(60), 
  FileType nvarchar(60), Document varbinary(max));
GO

INSERT INTO myTable(FileName, FileType, Document) 
   SELECT a.jpg' AS FileName, 
      '.jpg' AS FileType, 
      * FROM OPENROWSET(BULK N'C:\a.jpg', SINGLE_BLOB) AS photo;
GO



------解决方案--------------------
可直接用 OPENROWSET把文件存储在数据库中
------解决方案--------------------
//图片路径
string strPath = "~/photo/01.JPG";
string strPhotoPath = Server.MapPath(strPath);
//读取图片
FileStream fs = new System.IO.FileStream(strPhotoPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
byte[] photo = br.ReadBytes((int)fs.Length);
br.Close();
fs.Close();
//存入
SqlConnection myConn = new SqlConnection("Data Source=127.0.0.1;Initial Catalog=TestDB;User ID=sa;Password=sa");
string strComm = " INSERT INTO personPhoto(personName, personPhotoPath, personPhoto) ";
strComm += " VALUES('ky_min', '" + strPath + "', @photoBinary )";
SqlCommand myComm = new SqlCommand(strComm, myConn);
myComm.Parameters.Add("@photoBinary", SqlDbType.Binary,photo.Length);
myComm.Parameters["@photoBinary"].Value = photo;
myConn.Open();
myComm.ExecuteNonQuery();
myConn.Close();

不知道你程序用的是什么语言,我整个C#的希望于你有用

一些很年经验的经理和总管都说,不要把图片存在数据库内.
如果是怕盗链图片等东西的话, 可以在IIS上配置.