Pergunta

Estou aprendendo sobre o VB.NET e preciso trabalhar com um banco de dados SQLite usando o System de código aberto.data.sqlite ADO.NET Solução

Os exemplos que encontrei na seção Howto são apenas em C#. Alguém teria um exemplo simples no vb.net que eu poderia estudar para entender como usar transações ao inserir vários parâmetros?

FWIW, aqui está o código em que estou trabalhando:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim SQLconnect As New SQLite.SQLiteConnection()
    Dim SQLcommand As SQLite.SQLiteCommand
    Dim SQLtransaction As SQLite.SQLiteTransaction

    SQLconnect.ConnectionString = "Data Source=test.sqlite;"
    SQLconnect.Open()

    SQLcommand = SQLconnect.CreateCommand

    SQLcommand.CommandText = "CREATE TABLE IF NOT EXISTS files (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, hash TEXT);"
    SQLcommand.ExecuteNonQuery()

        '================ INSERT starts here
    SQLtransaction = SQLconnect.BeginTransaction()
    Dim myparam As New SQLite.SQLiteParameter()

    SQLcommand.CommandText = "INSERT INTO [files] ([name],[hash]) VALUES(?,?)"

    SQLcommand.Parameters.Add(myparam)

    'How to set all parameters? myparam.Value

    SQLcommand.ExecuteNonQuery()
    SQLtransaction.Commit()
        '================ INSERT ends here

    SQLcommand.CommandText = "SELECT id,name,hash FROM files"
    'How to tell if at least one row?
    Dim SQLreader As SQLite.SQLiteDataReader = SQLcommand.ExecuteReader()
    While SQLreader.Read()
        ListBox1.Items.Add(SQLreader(1))
    End While

    SQLcommand.Dispose()
    SQLconnect.Close()
End Sub

Obrigada.


EDIT: Para os interessados, aqui estão algum código de trabalho:

SQLtransaction = SQLconnect.BeginTransaction()
SQLcommand.CommandText = "INSERT INTO files (name,hash) VALUES(@name,@hash)"
SQLcommand.Parameters.AddWithValue("@name", "myfile")
SQLcommand.Parameters.AddWithValue("@hash", "123456789")
SQLcommand.ExecuteNonQuery()
SQLtransaction.Commit()
Foi útil?

Solução

A abordagem de transação deve ser a mesma (fornecendo a API SQLITE suporta transações.) Como para vários parâmetros, você precisa declarar uma instância da classe SQLParameter para cada parâmetro e adicione cada um à consulta.

Dim myparam As New SQLite.SQLiteParameter()
myparam.Value = "Parameter 1's value"

Dim myparam2 As New SQLite.SQLiteParameter()
myparam2.Value = "Parameter 2's value"

SQLcommand.Parameters.Add(myparam)
SQLcommand.Parameters.Add(myparam2)

Quanto à sua pergunta "Como saber se pelo menos uma linha" o padrão .NET SQLReader tem uma propriedade "Hasrows". ou seja

If SQLreader.HasRows Then
    While SQLreader.Read()
        ListBox1.Items.Add(SQLreader(1))
    End While
End If

Presumo que o driver sqllite também deve.

Desculpe se este código não está limpo VB, não o toquei há cerca de 5 anos!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top