我有一个存储过程,它将blob数据(VarBinary)作为参数,但我不能让它与TADOStoredProc一起使用。
存储过程
ALTER PROCEDURE [dbo].[spAddToSolve] @SolveData VarBinary(max)
AS
BEGIN
INSERT INTO dbo.ToSolve (Data, SolveStatus)
VALUES (@SolveData, 0)
END
以下是我尝试的两件事。
第一个找不到Field,我缺少什么
procedure AddItem(dbCon : TADOConnection; sourcePath : String);
var
addProc : TADOStoredProc;
field : TField;
dataStream : TFileStream;
blobStream : TStream;
begin
if FileExists(sourcePath) then
begin
dataStream := TFileStream.Create(sourcePath, fmOpenREad or fmShareDenyNone);
try
addProc := TADOStoredProc.Create(nil);
addProc.Connection := dbCon;
addProc.ProcedureName := 'spAddToSolve';
field := addProc.FieldByName('@SolveData'); //Field'@SolveData' not found
blobStream := addProc.CreateBlobStream(field, bmWrite);
blobStream.CopyFrom(dataStream, dataStream.Size);
addProc.Open;
finally
addProc.Free();
dataStream.Free();
end;
end;
end;
不知道如何让方法工作,我不知道如何将流数据转换为param值。
procedure AddItem(dbCon : TADOConnection; sourcePath : String);
var
addProc : TADOStoredProc;
param : TParameter;
field : TField;
dataStream : TFileStream;
begin
if FileExists(sourcePath) then
begin
dataStream := TFileStream.Create(sourcePath, fmOpenREad or fmShareDenyNone);
try
addProc := TADOStoredProc.Create(nil);
addProc.Connection := dbCon;
addProc.ProcedureName := 'spAddToSolve';
param := addProc.Parameters.AddParameter;
param.Name := '@SolveData';
param.DataType := ftBlob;
//not sure what to do next
param.Value := dataStream; //Types are not compatable
addProc.Open;
finally
addProc.Free();
dataStream.Free();
end;
end;
end;
答案 0 :(得分:3)
你的第二次尝试是在正确的轨道上。这应该有效:
param.DataType := ftBlob;
param.LoadFromStream(dataStream);