SQL Server 2008 - 使用 FILESTREAM 从数据库中写入和读取映像



我在SQL SERVER 2008中创建了数据库并启用了文件流技术。现在,如何将图像从vb 6.0保存到SQL Server。我对文件流的数据库查询如下:

CREATE DATABASE Photo;
GO
ALTER DATABASE Photo
ADD FILEGROUP PhotoDBFS CONTAINS FILESTREAM;
GO
DECLARE @FilePath varchar(MAX) = (SELECT SUBSTRING(physical_name, 1, CHARINDEX(N'master.mdf',     LOWER(physical_name)) - 1)
              FROM master.sys.master_files
              WHERE database_id = 1 AND file_id = 1) + 'PhotoDBFS_Filestream';

DECLARE @SQL varchar(MAX) = '
ALTER DATABASE Photo ADD FILE (
   NAME = PhotoDBFSFile,
   FILENAME = ''' + @FilePath + ''')
TO FILEGROUP PhotoDBFS;';
EXECUTE(@SQL);
GO

我要保存图像的表结构如下:

CREATE TABLE Photos
(
PhotoId                 bigint                      NOT NULL PRIMARY KEY IDENTITY(1,1),
Title                   varchar(100)                NOT NULL DEFAULT(''),
Subject                 varchar(100)                NOT NULL DEFAULT('No Subject'),
Place                   varchar(100)                NOT NULL DEFAULT('Unknown'),
Comment                 varchar(1000)                   NULL DEFAULT(''),
Rating                  tinyint                     NOT NULL DEFAULT(0),
PhotoFile               varbinary(MAX)  FILESTREAM  NOT NULL,
CONSTRAINT PhotoRatingCheck CHECK(Rating >=0 AND Rating<=10)
);

我保存图像的vb代码如下:

'Saving in the table [Photos]
Set Rs = New Recordset
SqlString = "SELECT * FROM Photos"
Rs.Open SqlString, con, adOpenStatic, adLockOptimistic, adCmdText
Rs.AddNew
    Rs("UniqueId") = txtUniqueId.Text
    Rs("CategoryId") = tempCategoryId
    Rs("AlbumId") = tempAlbumId
    Rs("Title") = txtTitle.Text
    Rs("Subject") = txtSubject.Text
    Rs("Place") = txtPlace.Text
    Rs("Comment") = txtComment.Text
    Rs("Rating") = sliderRating.Value
    Rs("PhotoFile") = PhotoLocation
Rs.Close
Set Rs = Nothing

我在保存时收到此错误。多步骤 OLE DB 操作生成错误。 检查每个 OLE DB 状态值(如果可用)。没有做任何工作。

我还想从数据库中读取保存的图像。有什么建议吗???

您无法

更新IDENTITY列,因此请删除UniqueId字段上的分配,现在肯定会失败。

当访问 BLOB 列时PhotoFile有时使用Field对象的属性ValueRs!PhotoFile.Value = binaryDataRs("PhotoFile").Value = binaryData

要使表具有一个或多个 FILESTREAM 列,它还必须具有具有 ROWGUIDCOL 属性的唯一标识符数据类型的列。您粘贴在问题中的 CREATE TABLE 语句甚至有效吗?

相关内容

  • 没有找到相关文章

最新更新