2010-03-05 2 views
4

Я изучаю VB.Net и должен работать с базой данных SQLite с использованием решения System.Data.SQLite с открытым исходным кодомINSERT с транзакцией и параметрами?

Примеры, которые я нашел в разделе HOWTO, находятся только в C#. Будет ли у кого-нибудь простой пример в VB.Net, что я мог бы изучить, чтобы понять, как использовать транзакции, когда INSERTing несколько параметров?

FWIW, вот код, я работаю над:

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 

Спасибо.


Edit: Для тех, кто заинтересован, вот некоторые рабочий код:

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() 

ответ

0

подход сделка должна быть такой же (при условии, SQLite API поддерживает транзакции). Что касается множества параметров, вы должны объявить экземпляр класса SqlParameter для каждого параметра, затем добавьте каждый из них в запрос.

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) 

Что касается вашего вопроса «Как узнать, есть ли по крайней мере один ряд» стандарт .NET SQLReader нам иметь свойство «HasRows». то есть

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

Я полагаю, что драйвер SQLlite также должен быть.

Извините, если этот код не является чистым VB, я не коснулся его примерно через 5 лет!

+0

Спасибо, ребята. Я нашел образец, который использовал SQLcommand.Parameters.AddWithValue() для добавления элементов в подготовленный запрос. – Gulbahar

+0

А хорошо знать, я всегда делал «SqlCommand.Parameters.Add (новый SqlParameter (имя, значение)); - Я могу сэкономить немного набрав - спасибо :) –