erste Klasse: SQL Klasse für weniger Aufwand

    • VB.NET

    Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von zn-gong.

      erste Klasse: SQL Klasse für weniger Aufwand

      Hallo Leute ich arbeite derzeit an einem Projekt mit SQL verbindung und habe daher begonnen eine Klasse mit SQL Befhlen zu schreiben. Sie erleichtert das Arbeiten für nichtprofis in SQL und dient zu verkleinerung des Quellcodes. Da dies meine erste Klasse ist, ist sie nochnicht 100% vollständig und wird noch bearbeitet. Allerdings stelle ich den bisjetzt benutzbaren Teil hier Public.

      Bitte keine Posts mit: "Unnötig", "Sinnlos" etc. Wenn ihr sowas nicht braucht dann ist es so für alle anderen Kommentare mit neuen Ideen oder sonsitges würde mich freuen :)

      Klasse:

      Imports:

      VB.NET-Quellcode

      1. Imports System.Data.SqlClient


      Spoiler anzeigen

      VB.NET-Quellcode

      1. Public Class Isql
      2. #Region "Definitionen"
      3. 'MySQL Klasse für Daten
      4. Dim con = New SqlConnection
      5. Dim cmd As New SqlCommand
      6. #End Region
      7. 'Jede Funktion mit einem Try ausführen um Connection probleme oder eingabe fehler vorzubeugen!
      8. ' Connection aufbauen
      9. Public Sub FUNKTION_Verbinden()
      10. con.ConnectionString = My.Settings.connection ' In My.Settings neuen String erstellen name: connection und dort den COnnectionstring angeben
      11. If con.State = Data.ConnectionState.Open Then
      12. ElseIf con.State = Data.ConnectionState.Closed Then
      13. con.open()
      14. cmd.Connection = CType(con, SqlConnection)
      15. Else
      16. MsgBox("Verbindung zur Datenbank fehlgeschlagen!")
      17. End If
      18. End Sub
      19. 'Connection schließen
      20. Public Sub FUNKTION_Trennen()
      21. If con.State = Data.ConnectionState.Open Then
      22. con.Close()
      23. ElseIf con.State = Data.ConnectionState.Closed Then
      24. Else
      25. MsgBox("Fehler beim schließen der Verbindung! Bitte überprüfen sie alle Vorgänge!")
      26. End If
      27. End Sub
      28. ' In Datenbank abfragen machen
      29. ' eineSpalteAbfrageString( Tabelle [string], Spalte [string], AbfrageSpalte [string], Abfragewert [string] )
      30. Public Function FUNKTION_EineSpalteAbfrageString(ByVal Tabelle As String, ByVal Spalte As String, ByVal WoSpalte As String, ByVal SpalteIst_string As String) As String
      31. cmd.CommandText = "SELECT " & Spalte & " as meinergebnis FROM " & Tabelle & " WHERE " & WoSpalte & " = '" & SpalteIst_string & "'"
      32. Dim myreader = cmd.ExecuteReader
      33. Dim ergebnis As String = "Kein Ergebnis"
      34. While myreader.Read
      35. ergebnis = CStr(myreader("meinergebnis"))
      36. End While
      37. myreader.Close()
      38. Return ergebnis.ToString
      39. End Function
      40. ' In Datenbank abfragen machen
      41. ' eineSpalteAbfrageInteger( Tabelle [string], Spalte [string], AbfrageSpalte [string], Abfragewert [Integer]
      42. Public Function FUNKTION_EineSpalteAbfrageInteger(ByVal Tabelle As String, ByVal Spalte As String, ByVal WoSpalte As String, ByVal SpalteIst_integer As String) As Integer
      43. cmd.CommandText = "SELECT " & Spalte & " as meinergebnis FROM " & Tabelle & " WHERE " & WoSpalte & " = " & SpalteIst_integer
      44. Dim myreader = cmd.ExecuteReader
      45. Dim ergebnis As Integer = 0
      46. While myreader.Read
      47. ergebnis = CInt(myreader("meinergebnis"))
      48. End While
      49. myreader.Close()
      50. Return ergebnis
      51. End Function
      52. ' In Datenbank Zeile löschen
      53. ' eineSpalteLöschenStringSuche( Tabelle [string], Spalte [string], Abfragewert [string])
      54. Public Function FUNKTION_EineSpalteLöschenStringSuche(ByVal Tabelle As String, ByVal Spalte As String, ByVal SpalteIst_string As String) As Boolean
      55. cmd.CommandText = "DELETE FROM " & Tabelle & " WHERE " & Spalte & " = '" & SpalteIst_string & "'"
      56. Return CBool(cmd.ExecuteNonQuery())
      57. End Function
      58. ' In Datenbank Zeile löschen
      59. ' eineSpalteLöschenIntegerSuche( Tabelle [string], Spalte [string], Abfragewert [string])
      60. Public Function FUNKTION_EineSpalteLöschenIntegerSuche(ByVal Tabelle As String, ByVal Spalte As String, ByVal SpalteIst_Integer As String) As Boolean
      61. cmd.CommandText = "DELETE FROM " & Tabelle & " WHERE " & Spalte & " = " & SpalteIst_Integer
      62. Return CBool(cmd.ExecuteNonQuery())
      63. End Function
      64. 'In Datenbank Befehl ausführen
      65. ' ausführen( Querry [string] )
      66. Public Function FUNKTION_Ausführen(ByVal querry As String) As Boolean
      67. cmd.CommandText = querry
      68. Return CBool(cmd.ExecuteNonQuery())
      69. End Function
      70. 'In Datenbank String updaten
      71. ' updateString(Tabelle [string], diezuänderndespalte [string], neuerwert [string], inwelcherspalter [string], welcherInhaltgesucht [string])
      72. Public Function FUNKTION_UpdateString(ByVal Tabelle As String, ByVal SpalteFeldZuÄndern As String, ByVal neuerwert_string As String, ByVal WhereSpalte As String, ByVal Inhalt_string As String) As Boolean
      73. cmd.CommandText = "UPDATE " & Tabelle & " SET " & SpalteFeldZuÄndern & " = '" & neuerwert_string & "' WHERE " & WhereSpalte & " = '" & Inhalt_string & "'"
      74. Return CBool(cmd.ExecuteNonQuery())
      75. End Function
      76. 'In Datenbank Integer updaten
      77. ' updateInteger(Tabelle [string], diezuänderndespalte [string], neuerwert [string], inwelcherspalter [string], welcherInhaltgesucht [string])
      78. Public Function FUNKTION_UpdateInteger(ByVal Tabelle As String, ByVal SpalteFeldZuÄndern As String, ByVal neuerwert_Integer As String, ByVal WhereSpalte As String, ByVal Inhalt_Integer As String) As Boolean
      79. cmd.CommandText = "UPDATE " & Tabelle & " SET " & SpalteFeldZuÄndern & " = " & neuerwert_Integer & " WHERE " & WhereSpalte & " = " & Inhalt_Integer & ""
      80. Return CBool(cmd.ExecuteNonQuery())
      81. End Function
      82. ' In Datenbank mehrzeilen Ausgeben als Listof strings | Strings
      83. ' mehrzeilerausgeben(Tabelle [string], SpaltezuAusgabe[string](, WoSpalte[string], WoIst_String[String]))
      84. ' ACHTUNG GIBT EINE LISTE VON STRINGS ZURÜCK!
      85. Public Function FUNKTION_Mehrzeilerausgeben_String(ByVal Tabelle As String, ByVal SpaltezuAusgabe As String, Optional ByVal WoSpalte As String = "", Optional ByVal WoIst_String As String = "") As List(Of String)
      86. 'Definitionen
      87. Dim fundListe As New List(Of String)
      88. ' Check ob OK
      89. If WoSpalte = "" Or WoSpalte = " " Then
      90. If WoIst_String = "" Or WoIst_String = " " Then
      91. cmd.CommandText = "SELECT " & SpaltezuAusgabe & " as ergebnis FROM " & Tabelle
      92. ' In Liste eintragen
      93. Dim myreader = cmd.ExecuteReader
      94. While myreader.Read
      95. fundListe.Add(myreader("ergebnis"))
      96. End While
      97. myreader.Close() ' Reader schließen
      98. End If
      99. Else
      100. cmd.CommandText = "SELECT " & SpaltezuAusgabe & " as ergebnis FROM " & Tabelle & " WHERE " & WoSpalte & " = '" & WoIst_String & "'"
      101. ' In Liste eintragen
      102. Dim myreader = cmd.ExecuteReader
      103. While myreader.Read
      104. fundListe.Add(myreader("ergebnis"))
      105. End While
      106. myreader.Close() ' Reader schließen
      107. End If
      108. ' Was er zurück gibt ( Gibt Liste von Ergebnissen zurück )
      109. Return fundListe
      110. End Function
      111. ' In Datenbank mehrzeilen Ausgeben als Listof Integer | Integer
      112. ' mehrzeilerausgeben(Tabelle [string], SpaltezuAusgabe[string](, WoSpalte[string], WoIst_String[String]))
      113. ' ACHTUNG GIBT EINE LISTE VON INTEGERN ZURÜCK!
      114. Public Function FUNKTION_Mehrzeilerausgeben_Integer(ByVal Tabelle As String, ByVal SpaltezuAusgabe As String, Optional ByVal WoSpalte As String = "", Optional ByVal WoIst_Integer As String = "") As List(Of Integer)
      115. 'Definitionen
      116. Dim fundListe As New List(Of Integer)
      117. ' Check ob OK
      118. If WoSpalte = "" Or WoSpalte = " " Then
      119. If WoIst_Integer = "" Or WoIst_Integer = " " Then
      120. cmd.CommandText = "SELECT " & SpaltezuAusgabe & " as ergebnis FROM " & Tabelle
      121. ' In Liste eintragen
      122. Dim myreader = cmd.ExecuteReader
      123. While myreader.Read
      124. fundListe.Add(myreader("ergebnis"))
      125. End While
      126. myreader.Close() ' Reader schließen
      127. End If
      128. Else
      129. cmd.CommandText = "SELECT " & SpaltezuAusgabe & " as ergebnis FROM " & Tabelle & " WHERE " & WoSpalte & " = " & WoIst_Integer
      130. ' In Liste eintragen
      131. Dim myreader = cmd.ExecuteReader
      132. While myreader.Read
      133. fundListe.Add(CInt(myreader("ergebnis")))
      134. End While
      135. myreader.Close() ' Reader schließen
      136. End If
      137. ' Was er zurück gibt
      138. Return fundListe
      139. End Function
      140. ' In Tabelle Zeile(n) einfügen
      141. ' FUNKTION_EinfügenEineZeile_String( Tabelle[string], Item1[string](, Item2[string, item3[string], item4[string], item5[string]))
      142. Public Function FUNKTION_EinfügenEineZeile_String(ByVal Tabelle As String, ByVal Item1 As String, Optional ByVal Item2 As String = "", Optional ByVal item3 As String = "", Optional ByVal item4 As String = "", Optional ByVal item5 As String = "") As Boolean
      143. If Item2 = "" Or Item2 = " " Then
      144. cmd.CommandText = "INSERT INTO " & Tabelle & " VALUES ( '" & Item1 & "' )"
      145. Else
      146. If item3 = "" Or item3 = " " Then
      147. ' HIER ITEM 2 EINFÜGEN
      148. cmd.CommandText = "INSERT INTO " & Tabelle & " VALUES ( '" & Item1 & "', '" & Item2 & "' )"
      149. Else
      150. If item4 = "" Or item4 = " " Then
      151. 'Hier ITEM 3 EINFÜGEN
      152. cmd.CommandText = "INSERT INTO " & Tabelle & " VALUES ( '" & Item1 & "', '" & Item2 & "', '" & item3 & "' )"
      153. Else
      154. If item5 = "" Or item5 = " " Then
      155. 'HIER ITEM 4 EINFÜGEN
      156. cmd.CommandText = "INSERT INTO " & Tabelle & " VALUES ( '" & Item1 & "', '" & Item2 & "', '" & item3 & "', '" & item4 & "' )"
      157. Else
      158. 'HIER ITEM 5 EINFÜGEN
      159. cmd.CommandText = "INSERT INTO " & Tabelle & " VALUES ( '" & Item1 & "', '" & Item2 & "', '" & item3 & "', '" & item4 & "', '" & item5 & "' )"
      160. End If
      161. End If
      162. End If
      163. End If
      164. Return CBool(cmd.ExecuteNonQuery()) ' Gibt wieder ob erfolgreich oder fehlgeschlagen!
      165. End Function
      166. 'Tabelle löschen
      167. ' FUNKTION_TabelleLöschen(Tabelle[string]
      168. Public Function FUNKTION_TabelleLöschen(ByVal Tabelle As String) As Boolean
      169. cmd.CommandText = "DROP TABLE " & Tabelle & " "
      170. Return CBool(cmd.ExecuteNonQuery())
      171. End Function
      172. ' Mehrere Befhele ausführen ( In Reihenfolge )
      173. ' Es wird eine Liste aus strings mit QWuerrys benötigt
      174. ' Man bekommt einen Bericht zurück
      175. Public Function FUNKTION_ListeVonBefehlenAusführen(ByVal ListeMitQuerrys As List(Of String)) As String
      176. 'Definitionen
      177. Dim qcounter As Integer = 0
      178. Dim succescounter As Integer = 0
      179. Dim failcounter As Integer = 0
      180. Dim cmdstatus As Boolean = False
      181. For Each querry In ListeMitQuerrys
      182. qcounter += 1 ' Für jeden Querry Counter + 1
      183. cmd.CommandText = querry
      184. cmdstatus = CBool(cmd.ExecuteNonQuery()) ' Querry ausführen und speichern ob erfolgreich oder nicht
      185. If cmdstatus = True Then
      186. succescounter += 1 ' Neuer erfolgreicher Querry
      187. Else
      188. failcounter += 1 ' Neuer fehlerhafter Querry
      189. End If
      190. Next
      191. ' Bericht schreiben und abgeben
      192. Dim Bericht As String = " Von " & qcounter.ToString & " Befehlen konnten " & succescounter.ToString & " Befehle ausgeführt werden und " & failcounter.ToString & " nicht ausgeführt werden!"
      193. Return Bericht
      194. End Function
      195. End Class



      Ihr könnt alle funktionen mit sql.FUNKTION_ sehen und sie werden sich selber erklären.
      Es kommen noch viele Futures und addons

      Viel Spaß :)

      // Klassen fehler behoben + neue Funkionen

      Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Schlammy“ ()

      1. Bitte VB-Tag benutzen - aber richtig

      2. DbParameter verwenden!

      3. Die Funktionen scheinen mir einen Logik-Fehler zu enthalten, zB

        VB.NET-Quellcode

        1. Dim ergebnis As String = "Kein Ergebnis"
        2. While myreader.Read
        3. ergebnis = CStr(myreader("meinergebnis"))
        4. End While
        vom Reader werden mehrere Datensätze abgerufen, aber alle werden in dieselbe Ergebnis-Variable geschrieben, sodass bei Vorhandensein mehrerer Abfrage-Ergebnisse alle Datensätze bis auf den letzten verloren gehen.
        Für den Abruf eines EinzelErgebnisses sollteman Command.ExecuteScalar vorziehen.

      4. Insgesamt führt dieser Ansatz dazu, dass man sich jede Möglichkeit verbaut, Databinding für sich arbeiten zu lassen. Also einfache und intuitive Oberflächen wie zB die Samples in DB-Programmierung ohne Datenbank sind nicht möglich, wenn man hierauf aufbaut.
      Ein Tip noch (abgesehen von der Sinnhaftigkeit dieser Klasse):
      Du kommentierst immer über deinen Funktionen ein bisschen was.
      Mach drei Hochkomma (''') über dem Funktionsnamen dann macht dir VS automatisch einen XML-Kommentar welcher die Funktion beschreibt (Musst natürlich selbst dann ausfüllen).
      Somit hat der Benutzer wenn er die Funktion auswählt über IntelliSense eine genaue Definition.

      lg
      ScheduleLib 0.0.1.0
      Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten
      Die Funktionen scheinen mir einen Logik-Fehler zu enthalten, zB






      VB.NET-Quellcode

      1. Dim ergebnis As String = "Kein Ergebnis"
      2. While myreader.Read
      3. ergebnis = CStr(myreader("meinergebnis"))
      4. End While




      vom Reader werden mehrere Datensätze abgerufen, aber alle werden
      in dieselbe Ergebnis-Variable geschrieben, sodass bei Vorhandensein
      mehrerer Abfrage-Ergebnisse alle Datensätze bis auf den letzten verloren
      gehen.
      Nein es ist richtig da ich das letzte ergebnis dass gefunden wird ausgegeben haben möchte

      Die variablen in den Befehlen können anhand der funktion erkannt werden. Falls ich mehr als ein Ergebnis haben möchte würde natürlich jeden fund in eine liste eintragen und diese abgeben ( was ich auch habe (mehrerezeilenausgeben))


      Insgesamt führt dieser Ansatz dazu, dass man sich jede
      Möglichkeit verbaut, Databinding für sich arbeiten zu lassen. Also
      einfache und intuitive Oberflächen wie zB die Samples in DB-Programmierung ohne Datenbank sind nicht möglich, wenn man hierauf aufbaut.
      Es ist ja auchnicht für DB-Programmierung ohne Datenbank ? Es ist für MySQL Datenbänke!


      Warum soll ich db-paramter nehmen? Dann funktioniert das alles nichtmehr so! Ich möchte gerne auf sqlclient bleiben wenn das unangemessen ist bitte den thread löschen. Danke

      Schlammy schrieb:

      Warum soll ich db-paramter nehmen?

      Weils 100000 mal übersichtlicher wird.
      Mach mal einen SQL wo du in der Where Klausel 30 Sachen abfragst. immer mit & Var1 & "...." & Var 2 & ....
      Dann wunderst du dich warum das Statement nicht funktioniert und hast einen Mörderspass bei der Fehlersuche.

      Such mal nach DB-Paramter hier im Forum (gibt glaub ich sogar ein Tut).

      lg
      ScheduleLib 0.0.1.0
      Kleine Lib zum Anlaufen von Code zu bestimmten Zeiten

      Schlammy schrieb:

      Es ist ja auchnicht für DB-Programmierung ohne Datenbank ?
      Ich habe die Beispiele aus DB-Programmierung ohne Datenbank als Beispiele für Oberflächen angeführt, nicht als Beispiele für DB-Programmierung.
      Und eine Benutzer-Oberfläche braucht jede DB-Anwendung, ob nun MySql dahinter steht oder sonstwas. Und mit deim Ansatz bekommst du die dort gezeigten Oberflächen einfach nicht hin, weil du dir Databinding grundlegend verbaust - so meinte ich das.
      Hallo,

      Ich bleibe leiber beim LINQ und bein EntryFramework. Das ist wircklich vei leinfacher. Deine Klasse ist vlt noch für CMD (Consolen Anwendungen) relativ gut zu gebrauchen aber für den rest ist es ein Fail.

      LG, Herbrich