Hi Teo, I am using the code in the book 16.1 to implment dynamic security. It is working fine as far the SQL returns only one record. If there are more than one record coming through datareader, at the line resultSetBuildler.Add(tupleBuilder.ToTuple) it gives me error.
While debuging it gives "Error in Application" which is not really very helpful.
Regards
Noordin
Public Shared Function GetMarketByEmployee(ByVal UserName As String) As [Set]Using connection As SqlConnection = New SqlConnection("Data Source=COMPAQ-SERVER;Initial Catalog=tempMIQB;Integrated Security=SSPI;")Dim strSQL As String = "SELECT distinct '[Market].[Market].&[' + Market_Name + ']' as Market " & _" FROM Employee INNER JOIN Market ON Employee.FK_Market = Market.PK_Market " & _" WHERE (Employee.NT_User_Name = '" & UserName & "')"
Using connection As SqlConnection = New SqlConnection("Data Source=COMPAQ-SERVER;Initial Catalog=tempMIQB;Integrated Security=SSPI;")Dim strSQL As String = "SELECT distinct '[Market].[Market].&[' + Market_Name + ']' as Market " & _" FROM Employee INNER JOIN Market ON Employee.FK_Market = Market.PK_Market " & _" WHERE (Employee.NT_User_Name = '" & UserName & "')"
Dim strSQL As String = "SELECT distinct '[Market].[Market].&[' + Market_Name + ']' as Market " & _" FROM Employee INNER JOIN Market ON Employee.FK_Market = Market.PK_Market " & _" WHERE (Employee.NT_User_Name = '" & UserName & "')"
" FROM Employee INNER JOIN Market ON Employee.FK_Market = Market.PK_Market " & _" WHERE (Employee.NT_User_Name = '" & UserName & "')"
" WHERE (Employee.NT_User_Name = '" & UserName & "')"
connection.Open()
Dim command As SqlCommand = New SqlCommand(strSQL, connection)command.CommandType = CommandType.TextDim reader As SqlDataReader = command.ExecuteReaderDim expr As Expression = New ExpressionDim resultSetBuildler As SetBuilder = New SetBuilderDim tupleBuilder As New TupleBuilderWhile reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
command.CommandType = CommandType.Text
Dim reader As SqlDataReader = command.ExecuteReaderDim expr As Expression = New ExpressionDim resultSetBuildler As SetBuilder = New SetBuilderDim tupleBuilder As New TupleBuilderWhile reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
Dim expr As Expression = New ExpressionDim resultSetBuildler As SetBuilder = New SetBuilderDim tupleBuilder As New TupleBuilderWhile reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
Dim resultSetBuildler As SetBuilder = New SetBuilderDim tupleBuilder As New TupleBuilderWhile reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
Dim tupleBuilder As New TupleBuilderWhile reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
While reader.Readexpr.ExpressionText = reader(0).ToStringDim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
expr.ExpressionText = reader(0).ToString
Dim mMDXValue As MDXValue = expr.CalculateMdxObject(Nothing)Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
Dim member As Member = mMDXValue.ToMembertupleBuilder.Add(member)resultSetBuildler.Add(tupleBuilder.ToTuple)End While
tupleBuilder.Add(member)
resultSetBuildler.Add(tupleBuilder.ToTuple)
End While
reader.Close()
Return resultSetBuildler.ToSetEnd Using
End Using
End Function
Thanks for reporting this. Please try the following code and let me know if it works for you. The differences are shown in bold.
Dim expr As AdomdServer.Expression = New AdomdServer.BLOCKED EXPRESSION Dim resultSetBuilder As SetBuilder = New SetBuilder() Dim tupleBuilder As TupleBuilder
While reader.Read() expr.ExpressionText = reader(0).ToString() ' Get the member Dim member As Member = expr.CalculateMdxObject(Nothing).ToMember() ' Construct a tuple tupleBuilder = New TupleBuilder(member) 'tupleBuilder.Add(member) ' Add the tuple to set Dim t As Tuple = tupleBuilder.ToTuple() resultSetBuilder.Add(t) End While