I want to delete the role by using AMO, but what I find is only a way that how to create it.
following sample is deleting the members of the role :
Code Snippet
Dim ServerName As Server 'Connect OLAP Server
Dim db As Database 'Database of OLAP Server
Dim role As Role
role = db.Roles.Item(0)
role.Members.Clear()
role.Update()
So I think that deleting the roles of database is like following :
Code Snippet
db.Roles.Clear()
db.Update()
It's wrong. It can't delete roles of a database after executing.
Please tell me what I shall do or where I can find these infoemation, thanks!!
Here's a code sample from one of our developers that does this. (Thanks for the code, Jason.) Keep in mind that in this code, we were looking for Roles that met a naming standard. It's a long story, but you may want to skip that step. Still, I kept it in here (and only changed the naming pattern) so I can insure the code still works with minimal effort. Also, keep in mind this code was written for an SSIS package so you will see some odd ball references in there.
Code Snippet
Public Sub Main()
' SSAS 2005 Server
Dim server As New Microsoft.AnalysisServices.Server
Try
' CONNECT TO THE SERVER
server.Connect("localhost")
' THE ANALYSIS SERVICES DATABASE TO CONNECT TO
Dim database As New Microsoft.AnalysisServices.Database
database = server.Databases.FindByName(Dts.Variables("AnalysisServicesDatabaseName").Value.ToString)
Dim roleCollection As New ArrayList()
' FIND ALL OF THE ROLES IN THE ANALYSIS SERVICES DB THAT MATCH THE NAMING PATTERN
For Each currentRole As Role In database.Roles
If (currentRole.Name.StartsWith("XYZ")) Then
' BECAUSE YOU CAN'T DELETE AN ITEM IN A COLLECTION, ADD TO THE roleCollection ARRAY LIST
roleCollection.Add(currentRole)
End If
Next
' DELETE ALL ROLES IN THE roleCollection
For Each currentObj As Role In roleCollection
'DROP OPTION OF AlterOrDeleteDependents SHOULD REMOVE ANY ASSOCIATED PERMISSIONS WITH THIS ROLE
currentObj.Drop(DropOptions.AlterOrDeleteDependents)
database.Update()
Next
Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
Dts.Events.FireError(1, ex.TargetSite.ToString, ex.Message, "", 0)
Finally
server.Disconnect()
End Try
End Sub
Thanks for your answer~~
I can delete the role now.But I find that I can skip the step of ArrayList() and delete the role.
I don't know what a risk has in these statement, like following code :
If you know that. Could you tell me,please? Thanks!!
Code Snippet
Public Sub Main()
' SSAS 2005 Server
Dim server As New Microsoft.AnalysisServices.Server
Try
' CONNECT TO THE SERVER
server.Connect("localhost")
' THE ANALYSIS SERVICES DATABASE TO CONNECT TO
Dim database As New Microsoft.AnalysisServices.Database
database = server.Databases.FindByName(Dts.Variables("AnalysisServicesDatabaseName").Value.ToString)
' DELETE A ROLES
Dim currentObj As Role
currentObj.database.Roles.FinByName("XYZ")
currentObj.Drop(DropOptions.AlterOrDeleteDependents)
database.Update()
Dts.TaskResult = Dts.Results.Success
Catch ex As Exception
Dts.Events.FireError(1, ex.TargetSite.ToString, ex.Message, "", 0)
Finally
server.Disconnect()
End Try
End Sub
No comments:
Post a Comment