我在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
对象的属性Value
即 Rs!PhotoFile.Value = binaryData
或Rs("PhotoFile").Value = binaryData
要使表具有一个或多个 FILESTREAM 列,它还必须具有具有 ROWGUIDCOL 属性的唯一标识符数据类型的列。您粘贴在问题中的 CREATE TABLE 语句甚至有效吗?