Executar programas do servidor
Como eu posso executar programas no servidor usando asp.net2? Quero rodar um programa que faz dts no sqlserver.
Ademilso Peres
Curtidas 0
Respostas
Luiz Maia
14/02/2010
Ademilso,
Tem varias formas de invocar um DTS, uma delas é usando um Stored Procedure, do qual vc pode chamar o pacote DTS dirtetamente.
Outra, mais usada, é usando a dll dtspkg.dll, que deve ser registrada no servidor, isto pode causar alguns problemas, pois em HOSTS de hospedagem não sei te informar se ja existe esta DLL devidamente registrada.
Para isto, faça o seguinte:
Copie a DLL dtspackage.dll para o servidor web e registre-a la.
Adicione a referencia DTSPakhage no VS.
Depois use o seguinte codigo (esta em VBnet):
Dim objDTS As New DTS.Package
Dim objStep As DTS.Step
Dim sSrc, sDsc As String
Dim dErr As Double
'Glb_SrvName = "Server"
'glb_username = "Admin"
'Glb_PassWd = "Admin123"
GetConnectionInfo()
'objDTS.DTSSQLStgFlag_Default
Dim obj As Object
obj = DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default
Try
objDTS.LoadFromSQLServer(Glb_SrvName, glb_username, Glb_PassWd, 0, , , , "DTSToExecute")
For Each objStep In objDTS.Steps
objStep.ExecuteInMainThread = True
Next
objDTS.Execute()
For Each objStep In objDTS.Steps
If objStep.ExecutionResult = DTS.DTSStepExecResult.DTSStepExecResult_Failure Then
objStep.GetExecutionErrorInfo(dErr, sSrc, sDsc)
Response.Write(sSrc & vbCrLf & sDsc)
End If
Next
objDTS = Nothing
lblMsg.Visible = True
lblMsg.Text = " Data Updated Successfully "
Catch ex As Exception
lblMsg.Visible = True
lblMsg.Text = ex.Message
Exit Sub
End Try Abraços Qualquer duvida me diga, ok? Att Luiz Maia
Dim objStep As DTS.Step
Dim sSrc, sDsc As String
Dim dErr As Double
'Glb_SrvName = "Server"
'glb_username = "Admin"
'Glb_PassWd = "Admin123"
GetConnectionInfo()
'objDTS.DTSSQLStgFlag_Default
Dim obj As Object
obj = DTS.DTSSQLServerStorageFlags.DTSSQLStgFlag_Default
Try
objDTS.LoadFromSQLServer(Glb_SrvName, glb_username, Glb_PassWd, 0, , , , "DTSToExecute")
For Each objStep In objDTS.Steps
objStep.ExecuteInMainThread = True
Next
objDTS.Execute()
For Each objStep In objDTS.Steps
If objStep.ExecutionResult = DTS.DTSStepExecResult.DTSStepExecResult_Failure Then
objStep.GetExecutionErrorInfo(dErr, sSrc, sDsc)
Response.Write(sSrc & vbCrLf & sDsc)
End If
Next
objDTS = Nothing
lblMsg.Visible = True
lblMsg.Text = " Data Updated Successfully "
Catch ex As Exception
lblMsg.Visible = True
lblMsg.Text = ex.Message
Exit Sub
End Try Abraços Qualquer duvida me diga, ok? Att Luiz Maia
GOSTEI 0
Ademilso Peres
14/02/2010
Talvez pra mim chamar via stored procedures seja mais facil. Mas tambem gostaria de saber se tem jeito de rodar qualquer programa por exemplo um notepad.
GOSTEI 0
Ademilso Peres
14/02/2010
Como posso chamar via stored procedure?
GOSTEI 0
Luiz Maia
14/02/2010
Ademilso, veja este exemplo abaixo:
IF EXISTS (SELECT * FROM sysobjects WHERE type = 'P' AND name = 'DtsRun')
BEGIN
PRINT 'Dropping Procedure DtsRun'
DROP Procedure DtsRun
END
GO
PRINT 'Creating Procedure DtsRun'
GO
CREATE Procedure DtsRun
/* Param List */
@ServerName varchar(30),
@UserName varchar(30),
@Password varchar(30),
@DtsName varchar(30),
@DtsPassword varchar(30),
@GlobleVariableList varchar(500) --"/A <GlobalVariableName>:<datatypeid>=<GlobalVariableValue>"
WITH ENCRYPTION
AS
DECLARE @ERROR int -- For Hold Error Number
DECLARE @CMD varchar(1000) -- Dts Run Command
BEGIN
-- Set as No Error
SET @ERROR = 0
IF( @GlobleVariableList IS NULL )
BEGIN
-- Without Globle Variable
SET @CMD = 'dtsrun /S '+@ServerName+' /U '+@UserName+' /P '+@Password+' /N '+@DtsName+' /M '+ @DtsPassword
END
ELSE
BEGIN
-- With Globle Variable
SET @CMD = 'dtsrun /S '+@ServerName+' /U '+@UserName+' /P '+@Password+' /N '+@DtsName+' /M '+@DtsPassword+' '+@GlobleVariableList+''
END
EXECUTE @ERROR = master..xp_cmdshell @CMD
-- + Error Checking
SELECT @ERROR = COALESCE( NULLIF ( @ERROR, 0 ), @@ERROR )
IF @ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN @ERROR END
END
-- Return Error
RETURN @ERROR
GO
GRANT EXEC ON DtsRun TO PUBLIC
GO Com esta SP acima (generica) vc consegue executar qualquer DTS passando os parametros necessarios, como nome do DTS, servidor, senha e usuario e tb parametros de entrada do DTS (GlobleVariableList). Qualquer duvida, me avise, ok? Aguardo Att LUiz Maia
BEGIN
PRINT 'Dropping Procedure DtsRun'
DROP Procedure DtsRun
END
GO
PRINT 'Creating Procedure DtsRun'
GO
CREATE Procedure DtsRun
/* Param List */
@ServerName varchar(30),
@UserName varchar(30),
@Password varchar(30),
@DtsName varchar(30),
@DtsPassword varchar(30),
@GlobleVariableList varchar(500) --"/A <GlobalVariableName>:<datatypeid>=<GlobalVariableValue>"
WITH ENCRYPTION
AS
DECLARE @ERROR int -- For Hold Error Number
DECLARE @CMD varchar(1000) -- Dts Run Command
BEGIN
-- Set as No Error
SET @ERROR = 0
IF( @GlobleVariableList IS NULL )
BEGIN
-- Without Globle Variable
SET @CMD = 'dtsrun /S '+@ServerName+' /U '+@UserName+' /P '+@Password+' /N '+@DtsName+' /M '+ @DtsPassword
END
ELSE
BEGIN
-- With Globle Variable
SET @CMD = 'dtsrun /S '+@ServerName+' /U '+@UserName+' /P '+@Password+' /N '+@DtsName+' /M '+@DtsPassword+' '+@GlobleVariableList+''
END
EXECUTE @ERROR = master..xp_cmdshell @CMD
-- + Error Checking
SELECT @ERROR = COALESCE( NULLIF ( @ERROR, 0 ), @@ERROR )
IF @ERROR <> 0 BEGIN ROLLBACK TRANSACTION RETURN @ERROR END
END
-- Return Error
RETURN @ERROR
GO
GRANT EXEC ON DtsRun TO PUBLIC
GO Com esta SP acima (generica) vc consegue executar qualquer DTS passando os parametros necessarios, como nome do DTS, servidor, senha e usuario e tb parametros de entrada do DTS (GlobleVariableList). Qualquer duvida, me avise, ok? Aguardo Att LUiz Maia
GOSTEI 0
Ademilso Peres
14/02/2010
E como eu poderia executar qualquer programa do servidor atraves do site? tem jeito?
GOSTEI 0
Luiz Maia
14/02/2010
Que tipo de programa você deseja executar no servidor?
Se for um DTS mesmo, basta executar a SP abaixo que qual de passei.
Att
Luiz Maia
GOSTEI 0
Luiz Maia
14/02/2010
E ai, aguardo sua resposta....
Abraços
Att
Luiz Maia
GOSTEI 0
Ademilso Peres
14/02/2010
Vou tentar dessa forma.
GOSTEI 0
Luiz Maia
14/02/2010
Ok. Fico no aguardo...
Abraços
Att
Luiz Maia
GOSTEI 0
Luiz Maia
14/02/2010
E ai Ademilso, resolveu?
Aguardo...
Abraços
Att
Luiz Maia
GOSTEI 0