Moin moin
Ich versuche mich gerade mit SQLight zu beschäftigen, weil ich von Access 2003 Datenbanken weg möchte.
Soweit klappt das ja mit den Abfragen nur diese Codeanalyse bzgl der "Sicherheit" macht mich
Warnung CA2100 Die in 'DBConnection.LoadTableColumns(String)' an 'SQLiteCommand.CommandText.Set(String)' übergebene Abfragezeichenfolge könnte die folgenden 'DBConnection.QuoteIdentifier(tableName)'-Variablen enthalten.
Wenn eine dieser Variablen aus Benutzereingaben stammt, sollten Sie eine gespeicherte Prozedur oder eine parametrisierte SQL-Abfrage verwenden, anstatt die Abfrage mit Zeichenfolgenverkettungen zu erstellen.
SqLightTest A:\Entwicklung\2024\SqLightTest\SqLightTest\DBConnection.vb 38 Aktiv
Die Zeile:
Spoiler anzeigen
Auf dem Form:
Im Modul:
*Topic verschoben*
Ich versuche mich gerade mit SQLight zu beschäftigen, weil ich von Access 2003 Datenbanken weg möchte.
Soweit klappt das ja mit den Abfragen nur diese Codeanalyse bzgl der "Sicherheit" macht mich
Warnung CA2100 Die in 'DBConnection.LoadTableColumns(String)' an 'SQLiteCommand.CommandText.Set(String)' übergebene Abfragezeichenfolge könnte die folgenden 'DBConnection.QuoteIdentifier(tableName)'-Variablen enthalten.
Wenn eine dieser Variablen aus Benutzereingaben stammt, sollten Sie eine gespeicherte Prozedur oder eine parametrisierte SQL-Abfrage verwenden, anstatt die Abfrage mit Zeichenfolgenverkettungen zu erstellen.
SqLightTest A:\Entwicklung\2024\SqLightTest\SqLightTest\DBConnection.vb 38 Aktiv
Die Zeile:
Auf dem Form:
VB.NET-Quellcode
- Public Class FrmMain
- Public Sub New()
- AddHandler DBConnection.TablesLoaded, AddressOf DBConnection_DBTabels
- AddHandler DBConnection.ColumnsLoaded, AddressOf DBConnection_TableColums
- InitializeComponent()
- End Sub
- Private Sub DBConnection_TableColums(ByVal colnames As List(Of String))
- ListBoxCategory.DataSource = colnames
- End Sub
- Private Sub DBConnection_DBTabels(ByVal tablesnames As List(Of String))
- ListBoxTables.DataSource = tablesnames
- End Sub
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- DBConnection.LoadTables()
- End Sub
- Private Sub ListBoxTables_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ListBoxTables.SelectedIndexChanged
- If ListBoxTables.SelectedItem IsNot Nothing Then
- DBConnection.SelectedTable = ListBoxTables.SelectedItem.ToString()
- Debug.WriteLine(DBConnection.SelectedTable)
- DBConnection.LoadTableColumns(DBConnection.SelectedTable)
- End If
- End Sub
- End Class
Im Modul:
VB.NET-Quellcode
- Module DBConnection
- Private connection As SQLiteConnection
- Public Event TablesLoaded(ByVal tableNames As List(Of String))
- Public Event ColumnsLoaded(ByVal cloumnList As List(Of String))
- Public Property SelectedTable As String
- Public ReadOnly DataBaseName As String = "northwindEF.db"
- Private Sub Con2DataBase()
- Dim databasePath As String = Path.Combine(Application.StartupPath, DataBaseName)
- Dim connectionString As String = $"Data Source={databasePath};Version=3;"
- connection = New SQLiteConnection(connectionString)
- connection.Open()
- End Sub
- Public Sub CloseConnection()
- If connection IsNot Nothing AndAlso connection.State = ConnectionState.Open Then
- connection.Close()
- End If
- End Sub
- Public Sub LoadTableColumns(tableName As String)
- ' Zur DB verbinden und öffnen
- Con2DataBase()
- Dim columnList As New List(Of String)()
- ' Sicheren Tabellennamen erstellen
- Dim query As String = $"PRAGMA table_info({QuoteIdentifier(tableName)})"
- ' SQLiteCommand mit parametrisierter Abfrage
- Using command As New SQLiteCommand(connection)
- command.CommandText = query
- command.Parameters.AddWithValue("@tableName", tableName)
- Using reader As SQLiteDataReader = command.ExecuteReader()
- While reader.Read()
- Dim columnName As String = reader("name").ToString()
- columnList.Add(columnName)
- End While
- End Using
- End Using
- CloseConnection()
- RaiseEvent ColumnsLoaded(columnList)
- End Sub
- Private Function QuoteIdentifier(identifier As String) As String
- ' Funktion zum Sicheren Umgeben von Tabellen-/Spaltennamen mit Anführungszeichen
- Return $"`{identifier.Replace("`", "``")}`"
- End Function
- Public Sub LoadTables()
- ' Zur DB verbinden und öffnen
- Con2DataBase()
- Dim tableNames As New List(Of String)()
- ' sqlite_master, um Informationen zu den Tabellen zu erhalten
- Using command As New SQLiteCommand("SELECT name FROM sqlite_master WHERE type='table' AND name <> 'sqlite_sequence'", connection)
- Using reader As SQLiteDataReader = command.ExecuteReader()
- While reader.Read()
- Dim tableName As String = reader("name").ToString()
- tableNames.Add(tableName)
- End While
- End Using
- End Using
- CloseConnection()
- RaiseEvent TablesLoaded(tableNames)
- End Sub
- End Module
*Topic verschoben*
Asperger Autistin. Brauche immer etwas um gewisse Sachen zu verstehen.
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()