通过存储过程的Blob数据

时间:2013-12-05 17:07:45

标签: delphi stored-procedures blob

我有一个存储过程,它将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;

1 个答案:

答案 0 :(得分:3)

你的第二次尝试是在正确的轨道上。这应该有效:

param.DataType := ftBlob;
param.LoadFromStream(dataStream);