2009-11-12 4 views
0

Je n'ai aucune erreur de ces morceaux de code, ils sont juste vides à chaque fois. Je me demande si je les ai peut-être mal créés. Aide comme toujours, énormément apprécié;Objet transmis à Fonction, mais non reçu ... pourquoi?

Dim l As New Log() 
l.Log = "Attempted staff login with username [" & txtUsername.Text & "]" 
l.LogId = 0 
l.StaffId = 4 
l.LogDate = Date.Now() 
l.Insert() 

.Insert() est repris dans ma couche BLL par ces deux fonctions;

Public Function Insert() As Integer 
      Return InsertLog(Me.LogId, Me.Log, Me.StaffId, Me.LogDate) 
     End Function 

     Public Shared Function InsertLog(ByVal logid As Integer, ByVal log As String, ByVal staffid As Integer, ByVal logdate As DateTime) As Integer 
      Using scope As New TransactionScope() 
       Dim record As New LogDetails(logid, log, staffid, logdate) 
       Dim ret As Integer = SiteProvider.Avalon.InsertLog(record) 
       scope.Complete() 
       Return ret 
      End Using 
     End Function 

Dans le DAL InsertLog est;

Public Overrides Function InsertLog(ByVal log As LogDetails) As Integer 
      Using cn As New SqlConnection(Me.ConnectionString) 
       Dim cmd As New SqlCommand("sp_log_Insert", cn) 
       cmd.CommandType = CommandType.StoredProcedure 
       cmd.Parameters.AddWithValue("@log", log.Log) 
       cmd.Parameters.AddWithValue("@staff_id", log.StaffId) 
       cmd.Parameters.AddWithValue("@log_date", log.LogDate) 

       Dim param As New SqlParameter 
       param.Direction = ParameterDirection.ReturnValue 
       cmd.Parameters.Add(param) 

       cn.Open() 
       Dim ret As Integer = ExecuteNonQuery(cmd) 
       Return CInt(Convert.ToInt32(param.Value)) 
      End Using 
     End Function 

-je obtenir le retour correct (l'identifiant de ligne db) de la fonction finale - mais les données correctes n'est pas inséré, je reçois les données par défaut, je mis en place pour l'intérieur LogDetails de la propriété. Quelqu'un peut-il voir ce que je peux faire mal ici?

aide énormément apprécié :)

Comme l'a demandé: DAL: LogDetails

Imports Microsoft.VisualBasic 
Namespace Harmony.Zizz.DAL 
    Public Class LogDetails 
     Protected _logid As Integer = 0 
     Protected _log As String = "" 
     Protected _staffid As Integer = 0 
     Protected _logdate As DateTime = Date.Now 

     Public Sub New() 

     End Sub 

     Public Sub New(ByVal logid As Integer, ByVal log As String, ByVal staffid As Integer, ByVal logdate As DateTime) 

     End Sub 

     Public Property LogId() As Integer 
      Get 
       Return _logid 
      End Get 
      Set(ByVal value As Integer) 
       _logid = value 
      End Set 
     End Property 
     Public Property Log() As String 
      Get 
       Return _log 
      End Get 
      Set(ByVal value As String) 
       _log = value 
      End Set 
     End Property 
     Public Property StaffId() As Integer 
      Get 
       Return _staffid 
      End Get 
      Set(ByVal value As Integer) 
       _staffid = value 
      End Set 
     End Property 
     Public Property LogDate() As DateTime 
      Get 
       Return _logdate 
      End Get 
      Set(ByVal value As DateTime) 
       _logdate = value 
      End Set 
     End Property 
    End Class 
End Namespace 
+0

Afficher utiliser le code pour les LogDetails esp. son constructeur – AnthonyWJones

+0

Salut Anthony, j'ai ajouté la classe LogDetails. C'est à partir de la DAL, que j'importe en haut de la BLL, d'où l'on appelle le .Inserts(). J'ai aussi une classe Log qui ressemble exactement à ma BLL, ceci est basé sur ma compréhension de l'architecture n-tier, mais peut très bien me tromper ... – dooburt

Répondre

2

Vous devez définir les champs privés aux valeurs envoyer à votre deuxième contructor de LogDetails:

Public Sub New(ByVal logid As Integer, ByVal log As String, ByVal staffid As Integer, ByVal logdate As DateTime) 
    _logid = logid 
    _log = log 
    _staffid = staffid 
    _logdate = logdate 
End Sub 
+0

tu me bats de 41 secondes! – TheVillageIdiot

+0

Je savais que je devais juste offrir cela avant même de demander que le constructeur soit montré. – AnthonyWJones

1

Qu'est-ce que c'est?

Public Sub New(ByVal logid As Integer, ByVal log As String, 
      ByVal staffid As Integer, ByVal logdate As DateTime) 

End Sub 

changement à ceci:

Public Sub New(ByVal logid As Integer, ByVal log As String, 
        ByVal staffid As Integer, ByVal logdate As DateTime) 

    _logid = logid 
    _staffid = staffid 
    _logdate = logdate 

End Sub 
+0

* facepalm * Bon Dieu! Merci les gars, parfois je ne peux pas voir le bois pour les arbres. Désolé, c'était quelque chose d'aussi inepte à la fin! +1 aux deux. – dooburt

Questions connexes