我在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状态值(如果可用)。没有工作。
我还想从数据库中读取保存的图像。任何建议???
答案 0 :(得分:0)
您无法更新IDENTITY
列,因此请删除UniqueId
字段上的分配,现在确定无效。
访问BLOB列时PhotoFile
有时有助于明确使用Value
对象的Field
属性,即Rs!PhotoFile.Value = binaryData
或Rs("PhotoFile").Value = binaryData
答案 1 :(得分:0)
对于具有一个或多个FILESTREAM列的表,它还必须具有具有ROWGUIDCOL属性的uniqueidentifier数据类型的列。你在问题中粘贴的CREATE TABLE语句是否有效?