Avatar billede websam Nybegynder
07. september 2005 - 12:48 Der er 10 kommentarer og
1 løsning

Connection property ?

Hejsa,

Jeg har følgende der updatere et produkt i databasen :

Public Function ProdEdit(en række variabler)
    Dim objDb As DbClass = New DbClass
    Dim objComm = New SqlCommand
       
    en række parametre

    objComm.CommandText = "Update tbl_products Set bla, bla, bla Where Id = @Id"
    objComm.ExecuteNonQuery()
    objDb.SqlClose()
    Return "True"
End Function

Men når jeg køre den får jeg en fejl der hedder :

ExecuteReader: Connection property has not been initialized.

Jeg har jo sat :

Dim objComm = New SqlCommand

Så hvad sker der lige her ?

/Websam
Avatar billede websam Nybegynder
07. september 2005 - 12:50 #1
Never mind havde glemt min db forbindelse DOHHHHH
Avatar billede dotnet_cowboy Nybegynder
07. september 2005 - 12:54 #2
Hey there...

Jeg går ud fra at DbClass kun indeholder connection stuff til din dba.

Hvorfor kalder du ikke en metode der hedder

objDb.SqlConnect
objComm.ExecuteNonQuery()
objDb.SqlClose()

og så tag og return en boolean værdi i stedet for en streng

/dc
Avatar billede websam Nybegynder
07. september 2005 - 12:55 #3
Det var det jeg fandt ud af ;o)
Avatar billede dotnet_cowboy Nybegynder
07. september 2005 - 13:00 #4
hehe... right on
Avatar billede websam Nybegynder
07. september 2005 - 13:02 #5
Blind kan man altid blive og specielt når det er noget man selv har lavet *GGG*, men vil da lave min return om til boolean ;o)
Avatar billede dotnet_cowboy Nybegynder
07. september 2005 - 13:07 #6
hvorfor ikke også smide dit sqlcommand objekt i DbClass?!?!?!

jo mindre kode du skal bruge i din forretningslogik metoder jo bedre...

hvis du forstår sådan en lille en :-)

så dit kald bliver allah: objDb.GetTheShit(connectionString, CommandType.Text, "SELECT * FROM...")

det rykker!

;-)
Avatar billede websam Nybegynder
07. september 2005 - 13:21 #7
Pt. har jeg en klasse der holder på database forbindelser til diverse database typer.

Dettil kommer at jeg benytter mig af en klasse til select, insert, update og delete i database og en klasse til validering og diverse andre ting inden tilgang til datalaget er det ikke godt nok ?

/Websam
Avatar billede dotnet_cowboy Nybegynder
07. september 2005 - 13:23 #8
Jo det lyder fint!

Det var bare for at optimere din DbClass.

Men lad mig se dine klasser, så skal jeg give dem en kommentar.

Du kan sende dem til ecoders@hotmail.com
Avatar billede websam Nybegynder
07. september 2005 - 13:30 #9
Det er nok lige i overkanten med det hele fra alle klasser men du kan få et udpluk fra de 3 jeg bruger :

Database forbindelse :
Imports System
Imports System.Data
Imports System.Data.SqlClient
Imports System.Data.OleDb

Public Class DbClass
    '--- Skaber forbindelse til sql server
    Private Shared Conn As SqlConnection
    Public Function SqlConnect()
        Dim Sql As String = "Data Source=xxx;Initial Catalog=yyy;User Id=zzz;Password=zzz;"
        Conn = New SqlConnection(Sql)
        Conn.Open()
        SqlConnect = Conn
    End Function

    '--- Function der lukker forbindelse til database.
    Public Sub SqlClose()
        Conn.Close()
    End Sub
End Class

Buisness lag :

'--- Function der smider dataset med produkter i cache.
Public Function CacheProduct(ByVal Update As String)
    Dim Source As DataSet = CType(HttpContext.Current.Cache("Product"), DataSet)
    Dim objProductData As ProductData = New ProductData
    If Update = "No" Then
        If Source Is Nothing Then
            Source = objProductData.LoadProduct()
            HttpContext.Current.Cache("Product") = Source
        Else
            Dim intRows As Integer
            intRows = Source.Tables(0).Rows.Count

            If intRows <> CInt(objProductData.CountProduct()) Then
                HttpContext.Current.Cache.Remove("Product")
                Source = objProductData.LoadProduct()
                HttpContext.Current.Cache("Product") = Source
            End If
        End If
    ElseIf Update = "Yes" Then
        HttpContext.Current.Cache.Remove("Product")
        Source = objProductData.LoadProduct()
        HttpContext.Current.Cache("Product") = Source
    End If
    Return Source
End Function

Datalag :

'--- Function der loader alt fra produkt tabel op i dataset.
Public Function LoadProduct()
    Dim objDb As DbClass = New DbClass
    Dim objConn As SqlConnection = objDb.SqlConnect
    Dim objComm As New SqlDataAdapter("Select * From tbl_products", objConn)
    Dim objDS As New DataSet
    objComm.Fill(objDS, "tbl_products")
    objDb.SqlClose()
    Return objDS
End Function

I det store hele er det sådan jeg arbejder om det så er select, insert, update el. delete der er tale om ;o)

/Websam
Avatar billede dotnet_cowboy Nybegynder
07. september 2005 - 14:02 #10
Ser rigtig godt ud WebSam...

Hvor siger du at data valideringen finder sted? Forhåbentlig i LoadProduct i datalaget. Eller er det bare mig der er blind....

:-)

Det er cool nok og bruge et dataset, især hvis man vil gøre brug af dens connectionsless funktionaliter.

Har du overvejet at bruge Custom Entitie klasser eller Data Wrapper klasser?

De entities kan du smide en en Collection klasse og så kan man lege lidt med den.

F.eks. knald sin entitie klasse i en BLL metode, hvor man løber den igennem med en reader, for så at tilføje dataene med Add metoden fra collectionklassen i løkken og returnere en ny instans af collection klassen.

Det rykker. Hvis du vil vide mere omkring denne fremgangsmåde så kig her:

http://msdn.microsoft.com/asp.net/default.aspx?pull=/library/en-us/dnaspp/html/custentcls.asp

Good luck and happy coding ;-)
Avatar billede websam Nybegynder
07. september 2005 - 14:21 #11
Valideringen af data indtastet i en given formular finder sted i mit buisness lag inden jeg overhovedet tilgår mit datalag.

Og alt det andet er helt sort snak i mine øre, men har heller ikke rodetmed .net mere end 2 mdr. så det kommer nok ;o)

/Websam
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester