Vb.net откройте базу данных sqlite в модуле
Я заметил повторяющийся код, когда я хочу предварительно сформировать функцию БД
Я использовал вспомогательную функцию в JavaFX и создал класс openDBUtil, поэтому мне нужно было только вызвать openDBUtil для предварительной обработки функций DB
Я пытаюсь сделать то же самое в VB.Net при использовании модуля из-за взаимозависимости одного оператора от другого это работает не так хорошо
Вопрос в том, возможно ли это вообще?
Если это возможно, как бы я закодировал эту концепцию?
Мой саб который работает так как он сейчас размещен ниже и код в модуле
ДА У МЕНЯ ЕСТЬ ИМПОРТ
Imports System.Data.SqlClient Imports System.Data.SQLite
Что я уже пробовал:
Private Sub PopulateDGV() Dim str2 As String Dim s1 As Integer Dim dbName As String = "Word.db" Dim conn As New SQLiteConnection("Data Source =" & dbName & ";Version=3;") Dim valuesList As ArrayList = New ArrayList() 'openDB() Public Sub in ModuleOne 'Read from the database Dim cmd As SQLiteCommand = New SQLiteCommand("Select * FROM ParentTable", conn) conn.Open() Dim rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader 'Set Design of the DataGridView dgvOne.DefaultCellStyle.Font = New Font("Tahoma", 10) dgvOne.ColumnCount = 2 dgvOne.Columns(0).Width = 60 dgvOne.Columns(1).Width = 420 'To Set Col Header Size Mode = Enabled 'To Set Col Header Default Cell Styles DO in Properties dgvOne.ColumnHeadersHeight = 34 'DGV Header Names dgvOne.Columns(0).Name = "PID" dgvOne.Columns(1).Name = "Entry Data" dgvOne.Columns(0).SortMode = DataGridViewColumnSortMode.NotSortable dgvOne.Columns(1).SortMode = DataGridViewColumnSortMode.NotSortable 'Read From DB Table add to DGV row While rdr.Read() valuesList.Add(rdr(1)).ToString() lbOne.Items.Add(rdr(1)).ToString() s1 = rdr(0).ToString str2 = rdr(1) dgvOne.Rows.Add(s1, str2) End While 'Add Blank rows to DGV For iA = 1 To 4 dgvOne.Rows.Add(" ") Next rdr.Close() conn.Close() End Sub
Module ModuleOne Public Sub openDB() Static dbName As String = "Word.db" Static conn As New SQLiteConnection("Data Source =" & dbName & ";Version=3;") Static cmd As SQLiteCommand = New SQLiteCommand("Select * FROM ParentTable", conn) conn.Open() Static rdr As SQLite.SQLiteDataReader = cmd.ExecuteReader 'conn.Close() End Sub End Module
Улучшенный код от OriginialGiff
Private Sub GetDB() Dim str2 As String Dim s1 As Integer 'Dim strConnect As String 'strConnect = "Data Source={0};Version=3;" Dim dbName As String = "Word.db" Using con As New SQLiteConnection("Data Source =" & dbName & ";Version=3;") 'Using con As New SqlConnection(strConnect) con.Open() 'Using cmd As New SqlCommand("SELECT * FROM ParentTable", con) Using cmd As SQLiteCommand = New SQLiteCommand("Select * FROM ParentTable", con) 'Using reader As SqlDataReader = cmd.ExecuteReader Using reader As SQLite.SQLiteDataReader = cmd.ExecuteReader While reader.Read() s1 = reader(0).ToString str2 = reader(1) lbOne.Items.Add(s1 & " " & str2) 'Dim id__1 As Integer = CInt(reader("iD")) 'Dim desc As String = DirectCast(reader("description"), String) 'lbOne.Items.Add(desc.ToString()) 'Console.WriteLine("ID: {0}" & vbLf & " {1}", desc) End While End Using End Using End Using End Sub
Garth J Lancaster
Вы сказали: "это не так хорошо работает" - не могли бы вы использовать Улучшить вопрос чтобы указать "почему бы и нет" - это может помочь людям узнать, что вам нужно, мне не совсем ясно, о чем именно вы просите
В общем, да, это должно быть возможно - посмотрите вот, например https://www.codeproject.com/Articles/1210189/Using-SQLite-in-Csharp-VB-Net -да ... если вы хотите быстро критиковать "ModuleOne", хорошо ..
1) ModuleOne - это плохое имя и не указывает на его назначение-например, vs 'sqliteDBModule' (я забываю соглашения VB 'case' )
2) openDB делает слишком много - он должен взять, может быть, Имя/Путь к БД и вернуть соединение с БД или ошибку (или даже выбросить исключение), вот и все - одна цель
3) Вы можете расширить свой "модуль" Sqlite для реализации openDB, closeDB, executeSQL и т. д. и т. д., Но, конечно, я бы сказал, что рассмотрите то, что уже есть, и повторно используйте/расширьте его
4) в дополнение к (3), я бы сказал, Подумайте о "слоях" / "абстракциях" .. на самом нижнем уровне у вас есть модуль базы данных sqlite, который делает только низкоуровневые вещи с любой базой данных. "Поверх" этого слоя вы затем создаете модули, специфичные для данных, которые вы хотите обработать - возможно, по одному модулю на базу данных или таблицу
Помогает ли это вам или приближает вас к тому, что вам нужно ?
Редактировать - тоже полезно, https://github.com/praeclarum/sqlite-net, https://blog.maskalik.com/asp-net/sqlite-simple-database-with-dapper/