18. november 2005 - 16:12Der er
24 kommentarer og 1 løsning
Cache af arraylist der ikke helt virker ?
Hejsa,
Jeg har lavet en function der skal lave en cache af en arrayliste, men jeg får en fejl på det.
Public Function LoadAll() Dim Source As ArrayList = CType(HttpContext.Current.Cache("LoadAllTeam"), ArrayList) If Source Is Nothing Then Source = iFaceData.GetAllTeam HttpContext.Current.Cache.Insert("LoadAllTeam", Source) Else Source = HttpContext.Current.Cache("LoadAllTeam") End If Return Source End Function
Det giver en fejl der lyder på :
Object reference not set to an instance of an object.
i denne linie :
Source = iFaceData.GetAllTeam
Metoden der henvises til er følgende :
Public Function GetAllTeam() Implements iBookingData.GetAllTeam Dim objConn As OleDbConnection = objDb.AccessConnect Dim objComm As New OleDbCommand("Select * From tbl_booking Order By TeamTime", objConn) Dim Rs As OleDbDataReader = objComm.ExecuteReader Dim objList As New ArrayList While Rs.Read() Dim objProperties As New BookingProperty objProperties.TeamId = Rs.GetInt32(0) objProperties.TeamName = Rs.GetString(1) objProperties.TeamDay = Rs.GetString(2) objProperties.TeamTime = Rs.GetString(3) objProperties.TeamMax = Rs.GetInt32(4) objList.Add(objProperties) End While objDb.AccessClose() Return objList End Function
Er der en der kan forklare mig hvad jeg gør forkert ?
I dette særtema om aspekter af AI ser vi på skiftet fra sprogmodeller til AI-agenter, og hvordan virksomheder kan navigere i spændet mellem teknologisk hastighed og behovet for menneskelig kontrol.
Ja det laver jeg med Dim iFaceData As iBookingData, har den bare ikke med i udplukket af koden. Ved debug skriver den godt nok at iFaceData = Nothing, men bruger jeg den uden for cache virker det godt nok !?!
Så skal jeg kalde klassen hvor jeg har mine metoder som snakker med databasen hvori jeg Implenetere interfacet :
Dim iFaceData As MinDataKlasse = New MinDataKlasse
For hvis dette er tilfældet så kan jeg ikke se hvad jeg skal bruge mit interface til andet end at sikre mig at de definerede metoder i mit interface også er til stede i min dataklasse ?
Ok prøv lige at tjekke disse klasse igennem og se om jeg har fat i det rigtige, jeg har kun lige ladet en enkel metode være i klasserne for at gøre det lidt mere overskueligt :
Interface klasse :
Namespace Booking Class BookingInterface Public Interface iBookingData Function GetAllTeam() End Interface End Class End Namespace
Data klasse :
Imports System Imports System.Data Imports System.Data.OleDb Imports Svoemmehal.Booking.BookingInterface
Namespace Booking Public Class BookingData Implements iBookingData Dim objDb As DbClass = New DbClass
'// <summary> '// Metode der henter alle hold. '// </summary> Public Function GetAllTeam() Implements iBookingData.GetAllTeam Dim objConn As OleDbConnection = objDb.AccessConnect Dim objComm As New OleDbCommand("Select * From tbl_booking Order By TeamTime", objConn) Dim Rs As OleDbDataReader = objComm.ExecuteReader Dim objList As New ArrayList While Rs.Read() Dim objProperties As New BookingProperty objProperties.TeamId = Rs.GetInt32(0) objProperties.TeamName = Rs.GetString(1) objProperties.TeamDay = Rs.GetString(2) objProperties.TeamTime = Rs.GetString(3) objProperties.TeamMax = Rs.GetInt32(4) objList.Add(objProperties) End While objDb.AccessClose() Return objList End Function End Class End Namespace
Buisness klasse
Imports System Imports System.Web
Namespace Booking Public Class BookingBiz Dim iFaceData As BookingData = New BookingData
'// <summary> '// Metode der henter alle hold fra databasen igennem interfacet. '// </summary> '// <param="CustomerId"></param> Public Function LoadAll() 'Dim Context As HttpContext = HttpContext.Current Dim Source As ArrayList = CType(HttpContext.Current.Cache("Text_GroupBy"), ArrayList) If Source Is Nothing Then Source = iFaceData.GetAllTeam HttpContext.Current.Cache.Insert("LoadAllTeam", Source) Else Source = HttpContext.Current.Cache("LoadAllTeam") End If Return Source End Function End Class End Namespace
Property klasse
Namespace Booking Public Class BookingProperty Dim iFaceData As BookingData = New BookingData Private _TeamId As Integer Private _TeamName As String Private _TeamDay As String Private _TeamTime As String Private _TeamMax As Integer
'--- Public properties der håndtere de private variabler. Public Property TeamId() As Integer Get Return _TeamId End Get Set(ByVal Value As Integer) _TeamId = Value End Set End Property
Public Property TeamName() As String Get Return _TeamName End Get Set(ByVal Value As String) _TeamName = Value End Set End Property
Public Property TeamDay() As String Get Return _TeamDay End Get Set(ByVal Value As String) _TeamDay = Value End Set End Property
Public Property TeamTime() As String Get Return _TeamTime End Get Set(ByVal Value As String) _TeamTime = Value End Set End Property
Public Property TeamMax() As Integer Get Return _TeamMax End Get Set(ByVal Value As Integer) _TeamMax = Value End Set End Property
'// <summary> '// Metode der sætter default value på variabler. '// </summary> Private Sub PopulateTeam() _TeamId = 0 _TeamName = "" _TeamDay = "" _TeamTime = "" _TeamMax = 0 End Sub
'// <summary> '// Default konstrukter der kalder PopulateUser. '// </summary> Public Sub New() PopulateTeam() End Sub
'// <summary> '// Overload konstrukter der sender bruger til redigering eller sletning. '// </summary> Public Sub New(ByVal TeamId As Integer) '--- Tjekker om id'et er med If TeamId > 0 Then Dim listUser As String = iFaceData.GetOneTeam(TeamId) Dim arrUser() As String = listUser.Split(";".ToCharArray) _TeamId = Convert.ToInt32(arrUser(0)) _TeamName = arrUser(1) _TeamDay = arrUser(2) _TeamTime = arrUser(3) _TeamMax = arrUser(4) Else PopulateTeam() End If End Sub End Class End Namespace
din business klasse er meget passthrough og ikke særligt business orienteret, men det deler den med mange andre - der kan også komme mere kød på senere
Som jeg har forstået det med en buisness klasse, så skal den håndtere alt det der ikke har noget disideret med database tilgang som f.eks. chacing, kryptering, validering, beregninger ect.
Men som så meget andet har jeg da sikkert slugt det forkert oxo *GGG*, men du skal være velkommen til at udvide min horisont eller rette mig hvis ikke jeg har ret i ovenstående ?
Og mener du så bare at jeg f.eks. skulle trække data direkte fra mit data lag over i mit design lag og så springe buisness delen over når jeg blot vil hente data til visning i f.eks. et datagrid ?
For det virker da for mig som værende i den forkerte retning ?
Nu er den kryptering jeg lige tænker på til f.eks. passwords hvor jeg i den forbindelse laver noget md5 til login på et admin modul eller et community som eksempel. Her vil jeg jo ikke benytte mig https over browser/IIS med sertifikat osv.
Og et eller andet sted skal jeg jo lave valideringen af det indtastede op i mod det der måtte ligge i databasen, eller ved oprettelse af en ny bruger skal der jo laves md5 på passwordet og det kan jeg ikke se hvorfor det ikke skulle ligge buisness delen.
Med hensyn til buisness laget så kommer der meget mere på det end der er lige nu, ovenstående var kun for at gøre det let at overskue ;o)
Men om ikke andet så har jeg fået testet det, det hele startede med nemmelig at jeg ikke kunne få vist min cache, så tak for hjælpen og smid et svar.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.