如果您想向数据访问添加行为,Reporting Services 可能不是您的解决方案。报告最好作为数据的展示,没有副作用。
也就是说,您能做的最好的事情可能是使用自定义代码审核渲染过程。例如,当您显示员工代码时,您会调用一个函数来记录它的显示以及由谁显示:
Function AuditEmployeeAccess(EmployeeCode As String) As String
' Connect to database, audit access (off the top of my head, could be bad)
Dim con As New SqlConnection
Dim cmd As New SqlCommand
con.ConnectionString = "Data Source=MyServer;Initial Catalog=AuditDb;User ID=username;Password=password"
con.Open()
' Don't do this, use parameters
cmd.CommandText = ("insert into audit (AuditEmployeeCode, AccessEmployeeCode) values ('" + Globals!UserId.Value + "', '" + EmployeeCode + "')")
cmd.Connection = con
cmd.ExecuteNonQuery()
con.Close()
' Return the employee code for display in the report
Return EmployeeCode
End Function
然后不是保存字段值的单元格,而是使用表达式:
=Code.AuditEmployeeAccess(Fields!EmployeeCode.Value)
现在,这将在员工代码呈现时进行审核,而不是在查看时进行审核。例如,如果报告有 5 页长,但查看者只查看前两页,则仍将对第 5 页上的访问进行审核。
出于这个原因,您最好创建自定义屏幕而不是使用报告。