第二部分 C#調用 SQL Server 的DTS
目前知道有兩種比較適用的方法:
(1).調用DTSRun命令來跑DTS.此種方法調用到了Master..xp_cmdshell擴展存儲過程,故需要將調用的用戶開通能訪問此擴展存儲過程的權限.
private void TestRunDTS()
{
string constr = "Data Source=localhost;initial catalog=master;user id=sa;passWord='';connect timeout=3000";
SqlConnection conn = new SqlConnection(constr);
conn.Open();
SqlCommand cmd = new SqlCommand();
cmd.Connection = conn;
cmd.CommandText = "exec master..xp_cmdshell 'DTSRun /~Z0x8E9EF55158ABA56C3C3346137F1F7B7B090F1F61D54D3981CFA1DB0E8B50C4E0D416AF2F746FA482B5E3C2AABA52D4838DAA496938F1E61155CBB055FF4082181E6BE53F08A47D7E6A82E6B77E3F83FCBAAD1B'";
try
{
cmd.ExecuteNonQuery();
}
finally
{
conn.Close();
}
}
注意看上面標紅色的部分,exec是來報告存儲過程的,xp_cmdshell 及後面的一長串代碼就是存儲過程及參數.dtsrun其實是DOS下的命令.後面跟的是DTS Package的ID.這個可以將DTS排成排程然後在屬性中查看到.
(2)第二種方法就要用到Microsoft提供的一個COM類.
直接提供下載吧:Microsoft.SQLServer.DTSPkg80.dll
用的是LoadFromSQLServer()方法
private void TestDTS()
{
Package2Class package = new Package2Class();
object pVarPersistStgOfHost = null;
package.LoadFromSQLServer("localhost", "sa", "",DTSSQLServerStorageFlags.DTSSQLStgFlag_DefaulT
,null,null,null,"DTSTest", ref pVarPersistStgOfHost);
package.Execute();
package.UnInitialize();
package = null;
}
參數說明:LoadFromSQLServer參數分別是:ServerName,userID,password,DTSSQLServerStorageFlags,PackagePassWord,PackageGuid,PackageVersionGuid,PackageName
第三部分:SQL Server 存儲過程中調用DTS
DECLARE @object int
DECLARE @hr int
DECLARE @src varchar(255), @desc varchar(255)
--生成對象
print 'start to create DTS.Pachage'
EXEC @hr = sp_OACreate 'DTS.Package', @object OUTPUT
if @hr <> 0
BEGIN
print 'error create DTS.Package'
EXEC sp_OAGetErrorInfo @object, @src OUT, @desc OUT
SELECT hr=convert(varbinary(4),@hr), Source=@src, Description=@desc
RETURN
END
print 'create DTS.Pachage successful'