Advertisement
HEX0x29A

SQLiteINI

Jul 7th, 2019
470
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 10.08 KB | None | 0 0
  1. using System;
  2. using System.IO;
  3. using System.Data;
  4. using System.Data.SQLite;
  5. using System.Windows;
  6.  
  7. namespace SQLiteINI
  8. {
  9.     class SQLiteIni
  10.     {
  11.         private const String dbJournalPostfix = "-journal";
  12.         private SQLiteConnection dbConnection;
  13.         public bool Connected {
  14.             get { return dbConnection != null && dbConnection.State != ConnectionState.Open; }
  15.         }
  16.  
  17.         public SQLiteIni(String FileName, String Password = "")
  18.         {
  19.             try
  20.             {
  21.                 if (File.Exists(FileName + dbJournalPostfix))
  22.                     File.Delete(FileName + dbJournalPostfix);
  23.                 if (!File.Exists(FileName))
  24.                     SQLiteConnection.CreateFile(FileName);
  25.                 dbConnection = new SQLiteConnection("DataSource=\"" + FileName + "\";Version=3;AutoVacuum=True;");
  26.                 dbConnection.Open();
  27.                 if (!string.IsNullOrEmpty(Password))
  28.                     dbConnection.ChangePassword(Password);
  29.                 if (dbConnection.State == ConnectionState.Open)
  30.                 {
  31.                     SQLiteCommand dbCommand = new SQLiteCommand(dbConnection);
  32.                     dbCommand.CommandText = "VACUUM";
  33.                     dbCommand.ExecuteNonQuery();
  34.                 }
  35.             }
  36.             catch (SQLiteException ex)
  37.             {
  38.                 dbConnection.Close();
  39.                 MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  40.             }
  41.         }
  42.  
  43.         ~SQLiteIni()
  44.         {
  45.             /*if (dbConnection != null && dbConnection.State == ConnectionState.Open)
  46.             {
  47.                 SQLiteCommand dbCommand = new SQLiteCommand(dbConnection);
  48.                 dbCommand.CommandText = "VACUUM";
  49.                 dbCommand.ExecuteNonQuery();
  50.                 dbConnection.Close();
  51.             }*/
  52.         }
  53.  
  54.         public dynamic Read(String Section, String Variable, dynamic Default)
  55.         {          
  56.             if (dbConnection != null && dbConnection.State == ConnectionState.Open)
  57.             {
  58.                 try
  59.                 {
  60.                     DataTable dTable = new DataTable();
  61.                     String sqlQuery = string.Format("SELECT * FROM [sqlite_master] WHERE [name] = '{0}' and [type] = 'table'", Section);
  62.                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  63.                     adapter.Fill(dTable);
  64.                     if (dTable.Rows.Count > 0)
  65.                     {
  66.                         dTable.Clear();
  67.                         dTable.Columns.Clear();
  68.                         sqlQuery = string.Format("SELECT [Value] FROM [{0}] WHERE [Variable] = '{1}'", Section, Variable);
  69.                         adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  70.                         adapter.Fill(dTable);
  71.                         if (dTable.Rows.Count > 0)
  72.                             return dTable.Rows[0][0];
  73.                         else
  74.                             return Default;
  75.                     }
  76.                     else
  77.                         return Default;
  78.                 }
  79.                 catch (SQLiteException ex)
  80.                 {
  81.                     MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  82.                     return Default;
  83.                 }
  84.             } else
  85.                 return Default;
  86.         }
  87.  
  88.         public void Write(String Section, String Variable, dynamic Value)
  89.         {
  90.             if (dbConnection != null && dbConnection.State == ConnectionState.Open)
  91.             {
  92.                 try
  93.                 {
  94.                     DataTable dTable = new DataTable();
  95.                     SQLiteCommand dbCommand = new SQLiteCommand(dbConnection);
  96.                     String sqlQuery = string.Format("SELECT * FROM [sqlite_master] WHERE [name] = '{0}' and [type] = 'table'", Section);
  97.                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  98.                     adapter.Fill(dTable);
  99.                     if (dTable.Rows.Count <= 0)
  100.                     {
  101.                         dbCommand.CommandText = string.Format("CREATE TABLE IF NOT EXISTS [{0}]([Variable] TEXT PRIMARY KEY NOT NULL, [Value] TEXT);", Section);
  102.                         dbCommand.ExecuteNonQuery();
  103.                     }
  104.                     dTable.Clear();
  105.                     dTable.Columns.Clear();
  106.                     sqlQuery = string.Format("SELECT [Value] FROM [{0}] WHERE [Variable] = '{1}'", Section, Variable);
  107.                     adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  108.                     adapter.Fill(dTable);
  109.                     if (dTable.Rows.Count > 0)
  110.                     {
  111.                         dbCommand.CommandText = string.Format("UPDATE [{0}] SET [Value] = '{1}' WHERE [Variable] = '{2}'", Section, Value, Variable);
  112.                         dbCommand.ExecuteNonQuery();
  113.                     }
  114.                     else
  115.                     {
  116.                         dbCommand.CommandText = string.Format("INSERT INTO [{0}]([Variable], [Value]) VALUES('{1}', '{2}')", Section, Variable, Value);
  117.                         dbCommand.ExecuteNonQuery();
  118.                     }
  119.                 }
  120.                 catch (SQLiteException ex)
  121.                 {
  122.                     MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  123.                 }
  124.             }
  125.         }
  126.  
  127.         public byte[] Read(String Section, String Variable, byte[] Default)
  128.         {
  129.             if (dbConnection != null && dbConnection.State == ConnectionState.Open)
  130.             {
  131.                 try
  132.                 {
  133.                     DataTable dTable = new DataTable();
  134.                     SQLiteCommand dbCommand = new SQLiteCommand(dbConnection);
  135.                     String sqlQuery = string.Format("SELECT * FROM [sqlite_master] WHERE [name] = '{0}' and [type] = 'table'", Section);
  136.                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  137.                     adapter.Fill(dTable);
  138.                     if (dTable.Rows.Count > 0)
  139.                     {
  140.                         dTable.Clear();
  141.                         dTable.Columns.Clear();
  142.                         dbCommand.CommandText = string.Format("SELECT [Value] FROM [{0}] WHERE [Variable] = '{1}'", Section, Variable);
  143.                         using (var reader = dbCommand.ExecuteReader())
  144.                         {
  145.                             if (reader.Read())
  146.                             {
  147.                                 const int CHUNK_SIZE = 2 * 1024;
  148.                                 byte[] buffer = new byte[CHUNK_SIZE];
  149.                                 long bytesRead;
  150.                                 long fieldOffset = 0;
  151.                                 using (MemoryStream stream = new MemoryStream())
  152.                                 {
  153.                                     while ((bytesRead = reader.GetBytes(0, fieldOffset, buffer, 0, buffer.Length)) > 0)
  154.                                     {
  155.                                         stream.Write(buffer, 0, (int)bytesRead);
  156.                                         fieldOffset += bytesRead;
  157.                                     }
  158.                                     return stream.ToArray();
  159.                                 }
  160.                             }
  161.                             else
  162.                                 return Default;
  163.                         }
  164.                     }
  165.                     else
  166.                         return Default;
  167.                 }
  168.                 catch (SQLiteException ex)
  169.                 {
  170.                     MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  171.                     return Default;
  172.                 }
  173.             }
  174.             else
  175.                 return Default;
  176.         }
  177.  
  178.         public void Write(String Section, String Variable, byte[] Value)
  179.         {
  180.             if (dbConnection != null && dbConnection.State == ConnectionState.Open)
  181.             {
  182.                 try
  183.                 {
  184.                     DataTable dTable = new DataTable();
  185.                     SQLiteCommand dbCommand = new SQLiteCommand(dbConnection);
  186.                     String sqlQuery = string.Format("SELECT * FROM [sqlite_master] WHERE [name] = '{0}' and [type] = 'table'", Section);
  187.                     SQLiteDataAdapter adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  188.                     adapter.Fill(dTable);
  189.                     if (dTable.Rows.Count <= 0)
  190.                     {
  191.                         dbCommand.CommandText = string.Format("CREATE TABLE IF NOT EXISTS [{0}]([Variable] TEXT PRIMARY KEY NOT NULL, [Value] BLOB);", Section);
  192.                         dbCommand.ExecuteNonQuery();
  193.                     }
  194.                     dTable.Clear();
  195.                     dTable.Columns.Clear();
  196.                     sqlQuery = string.Format("SELECT [Value] FROM [{0}] WHERE [Variable] = '{1}'", Section, Variable);
  197.                     adapter = new SQLiteDataAdapter(sqlQuery, dbConnection);
  198.                     adapter.Fill(dTable);
  199.                     if (dTable.Rows.Count > 0)
  200.                     {
  201.                         dbCommand.CommandText = string.Format("UPDATE [{0}] SET [Value] = @Value WHERE [Variable] = '{1}'", Section, Variable);
  202.                         dbCommand.Parameters.Add("@Value", DbType.Binary, Value.Length).Value = Value;
  203.                         dbCommand.ExecuteNonQuery();
  204.                     }
  205.                     else
  206.                     {
  207.                         dbCommand.CommandText = string.Format("INSERT INTO [{0}]([Variable], [Value]) VALUES('{1}', @Value)", Section, Variable);
  208.                         dbCommand.Parameters.Add("@Value", DbType.Binary, Value.Length).Value = Value;
  209.                         dbCommand.ExecuteNonQuery();
  210.                     }
  211.                 }
  212.                 catch (SQLiteException ex)
  213.                 {
  214.                     MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error);
  215.                 }
  216.             }
  217.         }
  218.     }
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement