SQL Server高手进入(100分)

  • 主题发起人 主题发起人 电暖气
  • 开始时间 开始时间

电暖气

Unregistered / Unconfirmed
GUEST, unregistred user!
如何使用SQL Server中扩展的两个存储过程xp_cmdshell[可执行SQL Server端的dos命令]
如何调用、如何得到返回的数据
另一个存储过程是sp_execute
 
天行软件(http://www.tianxing.org)好象就是用到存储过程xp_cmdshell
 
直接在后面接命令就是了

xp_cmdshell dir
xp_cmdshell "ping 263.net"
 
请使用搜索功能
1:使用BDE+ODBC连接,可以顺利的使用存储过程,担忧数据类型
兼容的问题(NVCHAR不认)
2:用TStoredproc控件,添加并设置params属性中的相应参数
再用如下代码:
with StoredProc1 do begin
ProcName := 'SP_XXX';
Params.clear;
Params.CreateParam(ftInteger, '@PARAM1', ptInput);
//接3个参数,看看Help
Params.CreateParam(ftInteger, '@PARAM2', ptOutput);
ExecProc;//如果返回结果集,就用Open
end;
这样,你就可以顺利的访问任何存储过程了。
 
我是用ado的方式来连接
添加ADOStoredProc在form1上,将ADOStoredProc的连接到SQL Server的master数据库上
在ADOStoredProc的ProcedureName属性上不知道为什么看不见扩展存储过程xp_cmdshell
剩下的就不会了。。。
请那位高手给展示一下,如何调用、如何得到返回的数据
 
看不见没关系,只要在ProcedureName属性内输入xp_cmdshell,然后再Paramters中
添加一个参数,类型为String,值为Dir C:,然后将Active置为True,用一个DBGrid->
DataSource->ADOStoredProc就可以看到C盘的目录啦。
 
to :TYZhang
我只实现了在ProcedureName属性内输入xp_cmdshell,然后再Paramters中
添加一个参数,类型只能是OleStr,值为Dir C:,然后将Active置为True
但是用一个DBGrid->DataSource->就不能指向>ADOStoredProc出错
 
to :TYZhang
ok 忘了一个中介DataSource1
 
象htw兄弟一样如何用程序来实现?to :TYZhang
 
我实验一下:
if ADOStoredProc1.Active then ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='xp_cmdshell';
ADOStoredProc1.Parameters.ParamByName('aaa').Value :='dir d:';
ADOStoredProc1.Open;
 
To 电暖气:

select id, owner = user_name(uid), name, status
from sysobjects
where type = N'P'
order by name
可以得到数据库下的所有的存储过程。

exec sp_sproc_columns N'存储过程名', N'dbo', N'数据库名', NULL, @ODBCVer = 3
可以得到存储过程的所有参数和参数的类型。
以上语句都是可以放在ADOQuery中执行的。
 
后退
顶部