问题
I'm learning about VB.Net and need to work with an SQLite database using the open-source System.Data.SQLite ADO.Net solution
The examples I found in the HOWTO section are only in C#. Would someone have a simple example in VB.Net that I could study to understand how to use transactions when INSERTing multiple parameters?
FWIW, here's the code I'm working on:
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
Thank you.
Edit: For those interested, here's some working code:
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()
回答1:
The transaction approach should be the same (providing the SQLite API supports transactions.) As for multiple parameters, you need to declare a SqlParameter class instance for each parameter, then add each one to the query.
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)
As for your question "How to tell if at least one row" the standard .NET SQLReader's have a "HasRows" property. i.e.
If SQLreader.HasRows Then
While SQLreader.Read()
ListBox1.Items.Add(SQLreader(1))
End While
End If
I presume the SQLlite driver should as well.
Sorry if this code isn't clean VB, I haven't touched it in about 5 years!
来源:https://stackoverflow.com/questions/2386588/insert-with-transaction-and-parameters