27. oktober 2003 - 17:36Der 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?
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()
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
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.