using System;
using SystemWeb;
using SystemWebServices;
using SystemWebServicesProtocols;
using SystemData;
using SystemDataOracleClient;
using SystemIO;
using SystemIOCompression;
using SystemRuntimeSerializationFormattersBinary;
[WebServiceBinding(ConformsTo = WsiProfilesBasicProfile_)]
public class Service : SystemWebServicesWebService
{
private OracleConnection webConnection;
DataTable curDt = new DataTable();
DataSet curSet = new DataSet();
OracleDataAdapter curDa = new OracleDataAdapter();
OracleCommand curComm = new OracleCommand();
private string GetCurCnnStr()
{
//连接数据库并打开
OracleConnectionStringBuilder cnnStrBuilder = new OracleConnectionStringBuilder();
cnnStrBuilderUserID = ;
cnnStrBuilderPassword = ;
cnnStrBuilderDataSource = ;
return cnnStrBuilderConnectionString;
}
public Service()
{
//如果使用设计的组件请取消注释以下行
//InitializeComponent();
}
[WebMethod(Description = 判断空值)]
private OracleParameter CreateParam(string ParamName object ParamValue)
{
OracleParameter Result = new OracleParameter();
ResultParameterName = ParamName;
if (ParamValue != null)
{
ResultValue = ParamValue;
}
else
{
ResultValue = DBNullValue;
}
return Result;
}
[WebMethod(Description = 测试连接)]
public string Linking()
{
return WebService连接成功!;
}
[WebMethod(Description = 查询信息)]
public byte[] Search(string img)
{
try
{
webConnection = new OracleConnection(GetCurCnnStr());
webConnectionOpen();
//查询表中的所有的数据
OracleDataAdapter webAdapter = new OracleDataAdapter(select pic from pic where id= + img webConnection);
DataSet webDataTable = new DataSet();
//byte[] webDataTable = new byte[];
webAdapterFill(webDataTable);
webConnectionClose();
//序列化为二进制
webDataTableRemotingFormat = SerializationFormatBinary;//确定序列化格式
BinaryFormatter bFormatter = new BinaryFormatter();
MemoryStream mStream = new MemoryStream();
bFormatterSerialize(mStream webDataTable);
byte[] bytes = mStreamToArray();//将数据流写入字节数组
//返回数组
return bytes;
}
catch (Exception)
{
curCommTransactionRollback();
return null;
}
finally
{
webConnectionClose();
}
}
[WebMethod(Description = 添加信息)]
public void Add(string id byte[] Image)
{
try
{
webConnection = new OracleConnection(GetCurCnnStr());
curCommConnection = webConnection;
webConnectionOpen();
curCommTransaction = webConnectionBeginTransaction();
curCommCommandText = insert into pic(idpic)values(:pId:pPic);
curCommParametersAdd(CreateParam(pId (id != null) ? id : null));
curCommParametersAdd(CreateParam(pPic (Image != null) ? Image : null));
curCommExecuteNonQuery();
curCommTransactionCommit();
}
catch (Exception)
{
curCommTransactionRollback();
}
finally
{
webConnectionClose();
}
}
}
unit Unit;
interface
uses
Windows Messages SysUtils Variants Classes Graphics Controls Forms
Dialogs InvokeRegistry Rio SOAPHTTPClient ExtCtrls StdCtrls
ServicetypesjpegStrUtils Buttons;
//StrUtils:取指定字符
{QDialogs:在delphi及以后的版本中
为了支持kylix能使程序在linux下运行
每一个单元都增加了对应的QDialogs单元
如果你用了带Q的单元哪么如果你的程序
要想在Windows中正常运行必须得有qtintfdll
的支持你可以搜索一个把程序中uses中的
单元前有Q的把Q去掉就ok了! }
type
TForm = class(TForm)
Label: TLabel;
Edit: TEdit;
Panel: TPanel;
Image: TImage;
HTTPRIO: THTTPRIO;
Open: TOpenDialog;
Search: TButton;
Add: TButton;
Update: TButton;
Delete: TButton;
Panel: TPanel;
Image: TImage;
Label: TLabel;
procedure SearchClick(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure ImageClick(Sender: TObject);
procedure EditKeyPress(Sender: TObject; var Key: Char);
procedure ImageClick(Sender: TObject);
procedure AddClick(Sender: TObject);
procedure DeleteClick(Sender: TObject);
procedure UpdateClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form: TForm;
files:TFileStream;
ms:TMemoryStream;
jpg:TjpegImage;
s:TByteDynArray;
path:WideString;
implementation
{$R *dfm}
procedure TFormSearchClick(Sender: TObject);
var
bmTemp:TjpegImage;//TBitmap;
Web_Search:ServiceSoap;
begin
bmTemp:=TjpegImageCreate;
//创建流
ms:=TMemoryStreamCreate;
Web_Search:=HTTPRIO as ServiceSoap;
try
if (editText<>) then
begin
//调用服务查询功能
s:=(Web_SearchSearch(editText));
if(length(s)<) then
begin
showmessage(没有图片请重输);
imagePictureAssign(nil);
end
else
begin
//从图片开始位置读取
msWrite(s[]length(s));
msPosition:=;
//加载流
bmTempLoadFromStream(ms);
//输出
imagePictureAssign(bmTemp);
end;
end
else
begin
showmessage(缺少查询条件!);
imagePictureAssign(nil);
editSetFocus;
end;
finally
//释放空间
msFree;
bmTempFree;
//控制
//editClear;
editSetFocus;
end;
end;
procedure TFormFormShow(Sender: TObject);
var
fstyle: dWord;
begin
//控制edit只输入数字
fstyle := GetWindowLong(EditHandle GWL_STYLE);
SetWindowLong(EditHandle GWL_STYLE fstyle or ES_NUMBER);
//指定图片格式
editSetFocus;
end;
procedure TFormImageClick(Sender: TObject);
var
Web_link:ServiceSoap;
begin
//测试连接
Web_link:=HTTPRIO as ServiceSoap;
showmessage(+Web_linkLinking+);
end;
procedure TFormEditKeyPress(Sender: TObject; var Key: Char);
begin
//输入控制
if key=# then
SearchClick;
end;
procedure TFormImageClick(Sender: TObject);
var
testpath:string;
testname:string;
begin
ms:=TMemoryStreamCreate;
jpg:=TjpegImageCreate;
if OpenExecute then
begin
testpath:=ExtractFileName(openFileName);
testname:=RightStr(testpath);
if (testname=jpg)or( testname=JPG) or( testname=jpeg)or( testname=JPEG)then
begin
path:=ExtractFileDir(openFileName)+\+ExtractFileName(openFileName);
files:= TFileStreamCreate(openFileNamefmShareDenyWrite);
try
jpgLoadFromStream(files);
jpgSaveToStream(ms);
imagePictureAssign(jpg);
finally
filesFree;
end;
end
else
showmessage(当前默认为JPEG类型图片);
end;
end;
end