Guest User

SQLite class

a guest
May 25th, 2017
153
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 13.08 KB | None | 0 0
  1. Imports System.Data.SQLite
  2. Imports System.Data
  3.  
  4. '- original Class made by Kati Maya on http://www.dreamincode.net/forums/topic/157830-using-sqlite-with-c%23/page__view__findpost__p__1930275
  5.  
  6. Class Sqlite
  7.     Private db As String
  8.     Private bdebug As Boolean = False
  9.     Private Shared conn As SQLiteConnection
  10.     Private Shared iOpenCon As Integer = 0
  11.  
  12.     Private Sub OpenConn()
  13.         If iOpenCon = 0 AndAlso db <> "" Then
  14.             conn = New SQLiteConnection(db)
  15.             conn.Open()
  16.         End If
  17.         iOpenCon += 1
  18.         'Debug.Write("o" & iOpenCon & ",")
  19.     End Sub
  20.  
  21.     Private Sub CloseConn(Optional CloseAll As Boolean = False)
  22.         'If CloseAll Then iOpenCon = 1
  23.         If iOpenCon > 0 Then
  24.             iOpenCon -= 1
  25.             If iOpenCon < 1 Then
  26.                 iOpenCon = 0
  27.                 conn.Close()
  28.                 conn.Dispose()
  29.             End If
  30.             'Debug.Write("c" & iOpenCon & ",")
  31.         End If
  32.     End Sub
  33.  
  34.     Public Sub New(DB_Name As String, Optional nDebug As Boolean = False)
  35.         If DB_Name.IndexOf("Data Source=") = -1 Then
  36.             MsgBox("Check your db_name, no data source provided", MsgBoxStyle.Critical, "SQLite class")
  37.             Exit Sub
  38.         End If
  39.  
  40.         db = DB_Name
  41. #If DEBUG Or nDebug Then
  42.         bdebug = True
  43. #End If
  44.     End Sub
  45.  
  46.     'grab a single value from command
  47.     Public Function GetValue(sql As SQLiteCommand) As Object
  48.         If bdebug Then SqlString(sql)
  49.         Dim value As Object
  50.         OpenConn()
  51.  
  52.         sql.Connection = conn
  53.         value = sql.ExecuteScalar()
  54.         CloseConn()
  55.         If value IsNot Nothing Then
  56.             If bdebug Then Debug.WriteLine("> Response: " & value.ToString)
  57.             GetValue = value
  58.         Else
  59.             GetValue = False
  60.         End If
  61.         value = Nothing
  62.     End Function
  63.  
  64.     'grab a single value from string query
  65.     Public Function GetValue(sql As String) As Object
  66.         If bdebug Then Debug.WriteLine(sql)
  67.         Dim value As Object
  68.         OpenConn()
  69.  
  70.         Try
  71.             Using cmd As New SQLiteCommand(conn)
  72.                 cmd.CommandText = sql
  73.                 value = cmd.ExecuteScalar()
  74.             End Using
  75.         Catch e As Exception
  76.             Throw New Exception(e.Message)
  77.         Finally
  78.             CloseConn()
  79.         End Try
  80.  
  81.         If value IsNot Nothing Then
  82.             If bdebug Then Debug.WriteLine("> Response: " & value.ToString)
  83.             GetValue = value
  84.  
  85.         Else
  86.             GetValue = False
  87.         End If
  88.         value = Nothing
  89.     End Function
  90.  
  91.     'returns a DataTable from a command
  92.     Public Function GetData(sql As SQLiteCommand) As DataTable
  93.         If bdebug Then SqlString(sql)
  94.         Try
  95.             OpenConn()
  96.             GetData = New DataTable()
  97.             sql.Connection = conn
  98.             Using reader As SQLiteDataReader = sql.ExecuteReader()
  99.                 GetData.Load(reader)
  100.             End Using
  101.         Catch e As Exception
  102.             Throw New Exception(e.Message)
  103.         Finally
  104.             CloseConn()
  105.         End Try
  106.     End Function
  107.  
  108.     'returns a DataTable from a string query
  109.     Public Function GetData(sql As String) As DataTable
  110.         If bdebug Then Debug.WriteLine(sql)
  111.         Try
  112.             OpenConn()
  113.             GetData = New DataTable()
  114.             Using cmd As New SQLiteCommand(conn)
  115.                 cmd.CommandText = sql
  116.                 Using reader As SQLiteDataReader = cmd.ExecuteReader()
  117.                     GetData.Load(reader)
  118.                 End Using
  119.             End Using
  120.         Catch e As Exception
  121.             Throw New Exception(e.Message)
  122.         Finally
  123.             CloseConn()
  124.         End Try
  125.     End Function
  126.  
  127.     'executes sql statement returning # of rows affected
  128.     Public Function Execute(sql As String) As Integer
  129.         Execute = -1
  130.         Try
  131.             OpenConn()
  132.             Using cmd As New SQLiteCommand(conn)
  133.                 cmd.CommandText = sql
  134.                 Execute = cmd.ExecuteNonQuery()
  135.             End Using
  136.         Catch e As Exception
  137.             Throw New Exception(e.Message)
  138.         Finally
  139.             CloseConn()
  140.         End Try
  141.         If bdebug Then
  142.             Debug.WriteLine(sql)
  143.             Debug.WriteLine(String.Format("Rows Updated: {0}", Execute))
  144.         End If
  145.     End Function
  146.  
  147.     'executes sql statement returning # of rows affected
  148.     Public Function Execute(sql As SQLiteCommand) As Integer
  149.         Execute = -1
  150.         Try
  151.             OpenConn()
  152.             sql.Connection = conn
  153.             Execute = sql.ExecuteNonQuery()
  154.             If sql.CommandText.ToLower.IndexOf("insert") > -1 Then
  155.                 sql.CommandText = "select last_insert_rowid();"
  156.                 Execute = CInt(sql.ExecuteScalar)
  157.             End If
  158.         Catch e As Exception
  159.             Throw New Exception(e.Message)
  160.         Finally
  161.             CloseConn()
  162.             If bdebug Then SqlString(sql, Execute)
  163.         End Try
  164.     End Function
  165.  
  166.     'return dictionary record, assuming a table structure of Id,value, to speed up lookups by loading tables into memory
  167.     Public Function GetRow(ByRef table As String, ByRef column As String) As Dictionary(Of String, String)
  168.         GetRow = New Dictionary(Of String, String)
  169.         Try
  170.             Dim dt As New DataTable()
  171.             OpenConn()
  172.             Using cmd As New SQLiteCommand(conn)
  173.                 cmd.CommandText = "SELECT @column FROM @table LIMIT 1"
  174.                 cmd.Parameters.AddWithValue("@column", column)
  175.                 cmd.Parameters.AddWithValue("@table", table)
  176.  
  177.                 If bdebug Then Debug.WriteLine(cmd.CommandText)
  178.  
  179.                 Using reader As SQLiteDataReader = cmd.ExecuteReader()
  180.                     dt.Load(reader)
  181.                 End Using
  182.             End Using
  183.  
  184.             For i = 0 To dt.Columns.Count - 1
  185.                 GetRow.Add(dt.Columns.Item(i).ToString, dt.Rows.Item(0).Item(dt.Columns.Item(i).ToString).ToString)
  186.             Next
  187.             dt.Dispose()
  188.             dt = Nothing
  189.         Catch e As Exception
  190.             Throw New Exception(e.Message)
  191.         Finally
  192.             CloseConn()
  193.         End Try
  194.     End Function
  195.  
  196.     'insert data, returns last inserted id
  197.     Public Function Insert(table As String, data As Dictionary(Of String, Object)) As Integer
  198.         Insert = -1
  199.         Try
  200.             If data.Count >= 1 Then
  201.                 Using cmd As New SQLiteCommand
  202.                     Dim columns As String = ""
  203.                     Dim values As String = ""
  204.                     For Each val As KeyValuePair(Of String, Object) In data
  205.                         columns &= val.Key & ","
  206.                         values &= "@" & val.Key & ","
  207.                         cmd.Parameters.AddWithValue("@" & val.Key, val.Value)
  208.                     Next
  209.                     columns = columns.Substring(0, columns.Length - 1)
  210.                     values = values.Substring(0, values.Length - 1)
  211.  
  212.                     cmd.CommandText = "insert into @table (@colums) values(@values);"
  213.                     cmd.Parameters.AddWithValue("@table", table)
  214.                     cmd.Parameters.AddWithValue("@colums", columns)
  215.                     cmd.Parameters.AddWithValue("@value", values)
  216.                     columns = Nothing
  217.                     values = Nothing
  218.  
  219.                     If bdebug Then SqlString(cmd)
  220.  
  221.                     cmd.Connection = conn
  222.                     cmd.ExecuteNonQuery()
  223.  
  224.                     cmd.CommandText = "select last_insert_rowid();"
  225.  
  226.                     Insert = CInt(cmd.ExecuteScalar)
  227.                     cmd.Parameters.Clear()
  228.                 End Using
  229.             End If
  230.         Catch e As Exception
  231.             Throw New Exception(e.Message)
  232.         Finally
  233.             CloseConn()
  234.         End Try
  235.     End Function
  236.  
  237.     'insert or ignore data, returns rows updated
  238.     Public Function InsertOrIgnore(table As String, data As Dictionary(Of String, Object)) As Integer
  239.         InsertOrIgnore = -1
  240.         Try
  241.             If data.Count >= 1 Then
  242.                 Using cmd As New SQLiteCommand
  243.                     Dim columns As String = ""
  244.                     Dim values As String = ""
  245.                     For Each val As KeyValuePair(Of String, Object) In data
  246.                         columns &= val.Key & ","
  247.                         values &= "@" & val.Key & ","
  248.                         cmd.Parameters.AddWithValue("@" & val.Key, val.Value)
  249.                     Next
  250.                     columns = columns.Substring(0, columns.Length - 1)
  251.                     values = values.Substring(0, values.Length - 1)
  252.                     cmd.CommandText = "insert or ignore into @table (@columns) values(@values);"
  253.                     cmd.Parameters.AddWithValue("@table", table)
  254.                     cmd.Parameters.AddWithValue("@columns", columns)
  255.                     cmd.Parameters.AddWithValue("@values", values)
  256.                     columns = Nothing
  257.                     values = Nothing
  258.  
  259.                     cmd.Connection = conn
  260.                     InsertOrIgnore = execute(cmd)
  261.                     If bdebug Then SqlString(cmd, InsertOrIgnore)
  262.                     cmd.Parameters.Clear()
  263.                 End Using
  264.             End If
  265.  
  266.         Catch e As Exception
  267.             Throw New Exception(e.Message)
  268.         Finally
  269.             CloseConn()
  270.         End Try
  271.     End Function
  272.  
  273.     'insert or replace data, returns rows updated
  274.     Public Function InsertOrUpdate(table As String, data As Dictionary(Of String, Object)) As Integer
  275.         InsertOrUpdate = -1
  276.         Try
  277.             If data.Count >= 1 Then
  278.                 Using cmd As New SQLiteCommand
  279.                     Dim columns As String = ""
  280.                     Dim values As String = ""
  281.                     For Each val As KeyValuePair(Of String, Object) In data
  282.                         columns &= val.Key & ","
  283.                         values &= "@" & val.Key & ","
  284.                         cmd.Parameters.AddWithValue("@" & val.Key, val.Value)
  285.                     Next
  286.                     columns = columns.Substring(0, columns.Length - 1)
  287.                     values = values.Substring(0, values.Length - 1)
  288.                     cmd.CommandText = "insert or replace into @table (@colums) values(@values);"
  289.                     cmd.Parameters.AddWithValue("@table", table)
  290.                     cmd.Parameters.AddWithValue("@colums", columns)
  291.                     cmd.Parameters.AddWithValue("@value", values)
  292.                     columns = Nothing
  293.                     values = Nothing
  294.  
  295.                     OpenConn()
  296.                     cmd.Connection = conn
  297.                     InsertOrUpdate = execute(cmd)
  298.                     If bdebug Then SqlString(cmd, InsertOrUpdate)
  299.                     cmd.Parameters.Clear()
  300.                 End Using
  301.             End If
  302.  
  303.         Catch e As Exception
  304.             Throw New Exception(e.Message)
  305.         Finally
  306.             CloseConn()
  307.         End Try
  308.     End Function
  309.  
  310.     'update a table, returns rows updated.  probably best to only use on simple integer primary key-based where clauses
  311.     Public Function Update(table As String, data As Dictionary(Of String, Object), where As String) As Integer
  312.         Update = -1
  313.         Try
  314.             If data.Count >= 1 Then
  315.                 Using cmd As New SQLiteCommand
  316.                     Dim sql As String = "update @table set "
  317.                     For Each val As KeyValuePair(Of String, Object) In data
  318.                         sql &= val.Key & "=@" & val.Key & ","
  319.                         cmd.Parameters.AddWithValue("@" & val.Key, val.Value)
  320.                     Next
  321.                     cmd.CommandText = sql.Substring(0, sql.Length - 1) & " where @where;"
  322.                     cmd.Parameters.AddWithValue("@table", table)
  323.                     cmd.Parameters.AddWithValue("@where", where)
  324.                     sql = Nothing
  325.  
  326.                     If bdebug Then SqlString(cmd)
  327.                     OpenConn()
  328.  
  329.                     cmd.Connection = conn
  330.                     Update = execute(cmd)
  331.  
  332.                     cmd.Parameters.Clear()
  333.                 End Using
  334.             End If
  335.         Catch e As Exception
  336.             Throw New Exception(e.Message)
  337.         Finally
  338.             CloseConn()
  339.         End Try
  340.     End Function
  341.  
  342.     Public Function SqlString(ByVal cmd As SQLiteCommand, Optional ByVal rows As Integer = 0) As String
  343.         Dim builder As New Text.StringBuilder(Environment.NewLine & "----------------")
  344.         For Each item As SQLiteParameter In cmd.Parameters
  345.             builder.Append(Environment.NewLine)
  346.             builder.AppendFormat("{0} = [{1}] ({2})", item.ParameterName, item.Value, item.DbType)
  347.         Next
  348.         builder.AppendLine(Environment.NewLine)
  349.         builder.AppendLine(cmd.CommandText)
  350.  
  351.         If rows > 0 Then
  352.             builder.AppendFormat("Rows Updated: {0}", rows)
  353.             builder.Append(Environment.NewLine)
  354.         End If
  355.         builder.AppendLine("----------------")
  356.         Debug.WriteLine(builder.ToString)
  357.         SqlString = builder.ToString
  358.         builder = Nothing
  359.     End Function
  360. End Class
Advertisement
Add Comment
Please, Sign In to add comment