Avatar billede jimmidreng Nybegynder
27. oktober 2003 - 17:36 Der er 3 kommentarer og
1 løsning

Insert og Update i SQL. ASP.NET

Nu er jeg ved at gå amok her.
Jeg vil lave en ganske almindelige update hvis konto id'et eksisterer, og en insert hvis den er nul.

Men jeg roder rundt i dataSets, datatables, adapters osv.
Jeg kan sagtens lave det med en SQLcommand, ingen probs. Men der er to ting jeg ikke ønsker;
1. at skulle skrive hele sql statementet i commandtext.
2. at bruge stored procedures.

Jeg er klar over at man ved at bruge parametre kan lave en
"insert into blabla(title) values(@title)"
cmd.parameters.add("@title","Jeg er et fjols")
cmd.executeNonQuery.
Kan inserte, men det fungere ikke for mig da jeg har rigtig rigtig mange felter der skal opdateres.

Det jeg i korte træk ønsker er lidt i gammel ASP stil.

CMD.Connection = Conn
CMD.Table = "Konti"
CMD.AddNew
CMD("title") = "jeg er et fjols"
CMD("city") = "Andeby"
CMD.Update

Det smarte ved ovenstående gamle metode er at jeg kan erstatte "Konti" med "select * from konti where id = 1"
og så fjerne AddNew, vupti, så kan jeg genbruge resten af koden, blot ved at ændre 2 linjer.

Kan det overhovedet lade sig gøre i .Net på en eller anden måde?
Avatar billede jimmidreng Nybegynder
27. oktober 2003 - 17:38 #1
Ps. Alle dynamiske sammensætninger af SQL strenge har ingen interesse, det er noget rod..
Avatar billede jimmidreng Nybegynder
28. oktober 2003 - 13:40 #2
Fuck det lort, nu har jeg lavet min egen class til det.
Hvis I kan bruge den så værsegod. Den har ikke de vilde tjeks eller noget, men virker for mig.

Kaldes således:

        Dim SQL As New SimpleSQL()
        SQL.Table = "testtable"
        SQL.Connection = Conn
        SQL.UpdateWhereSentence = "id = 1"
        Dim EXISTS As Boolean = SQL.SelectedExists
        If EXISTS = True Then
            SQL.SQLAction = SimpleSQL.SQLActions.UpdateRecord
        Else
            SQL.SQLAction = SimpleSQL.SQLActions.InsertNewRecord
        End If
        SQL.Field("title") = "MUMBO JUMBO"
        SQL.Update()
        SQL = Nothing
        Conn.Close()
Avatar billede jimmidreng Nybegynder
28. oktober 2003 - 13:41 #3
Class SimpleSQL
    Private Conn As SqlConnection
    Private strSQL As String
    Private DoAddNew As Boolean = False
    Private cTable As String
    Private cAction As SQLActions

    Private FieldCollection As New Collection()

    Public Enum SQLActions
        InsertNewRecord = 1
        UpdateRecord = 2
    End Enum

    Private Structure FieldValue
        Dim FieldName As String
        Dim Value
    End Structure

    Public WriteOnly Property SQLAction() As SQLActions
        Set(ByVal Value As SQLActions)
            cAction = Value
        End Set
    End Property

    Public Function SelectedExists() As Boolean
        Dim Result As Boolean
        Dim CMD As New SqlCommand("select * from " & cTable & " where " & strSQL, Conn)
        Dim rdd As SqlDataReader = CMD.ExecuteReader()
        If rdd.Read = True Then
            Result = True
        Else
            Result = False
        End If
        rdd.Close()
        rdd = Nothing
        CMD.Dispose()
        CMD = Nothing
        Return Result
    End Function

    Public Property Table() As String
        Get
            Return cTable
        End Get
        Set(ByVal Value As String)
            cTable = Value
        End Set
    End Property

    WriteOnly Property Connection() As SqlConnection
        Set(ByVal Value As SqlConnection)
            Conn = Value
        End Set
    End Property

    WriteOnly Property UpdateWhereSentence() As String
        Set(ByVal Value As String)
            strSQL = Value.ToString.Replace("where", "")
        End Set
    End Property

    Property Field(ByVal FieldName)
        Set(ByVal Value)
            Dim NewField As FieldValue
            With NewField
                .FieldName = FieldName.ToString.ToLower
                .Value = Value
            End With
            FieldCollection.Add(NewField, FieldName)
        End Set
        Get

            Dim F As Integer
            Dim oValue = Nothing
            For F = 1 To FieldCollection.Count
                If FieldCollection.Item(F).fieldname.ToString.ToLower = FieldName.ToString.ToLower Then
                    oValue = FieldCollection.Item(F).Value
                End If
            Next
            If IsNothing(oValue) = False Then
                Return oValue
            Else
                Return DBNull.Value
            End If
        End Get
    End Property

    Public Sub New(ByVal Connection As SqlConnection, ByVal SQLStatement As String)
        Conn = Connection
        strSQL = SQLStatement
    End Sub

    Public Sub New(ByVal Connection As SqlConnection)
        Conn = Connection
    End Sub

    Public Sub New()
        'Nothing
    End Sub

    Public Function Update() As Boolean
        Dim F As Integer = 0
        Dim cSQL As String = ""
        Dim vCol As String = ""
        Dim fCol As String = ""
        Dim CMD As New SqlCommand()

        Select Case cAction
            Case SQLActions.InsertNewRecord
                For F = 1 To FieldCollection.Count
                    fCol += FieldCollection(F).fieldname
                    vCol += "@" & FieldCollection(F).fieldname
                    If F < FieldCollection.Count Then
                        fCol += ","
                        vCol += ","
                    End If
                Next
                cSQL = "insert into " & cTable & "(" & fCol & ") values(" & vCol & ")"
            Case SQLActions.UpdateRecord
                For F = 1 To FieldCollection.Count
                    vCol += FieldCollection(F).fieldname & " = @" & FieldCollection(F).fieldname
                    If F < FieldCollection.Count Then
                        vCol += ","
                    End If
                Next
                cSQL = "update " & cTable & " set " & vCol & " where " & strSQL
        End Select

        CMD.Connection = Conn
        CMD.CommandText = cSQL
        For F = 1 To FieldCollection.Count
            CMD.Parameters.Add("@" & FieldCollection(F).FieldName, FieldCollection(F).value)
        Next
        CMD.ExecuteNonQuery()
        CMD.Dispose()
    End Function

End Class
Avatar billede jimmidreng Nybegynder
28. oktober 2003 - 13:41 #4
Og så lukker jeg ellers
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