Windows Server Üzerinde SQLite Kullanımı
Published: 2021-08-24 08:17:28

Kurulum adımlarını tamamladıktan sonra SQLite'a tam bir giriş yapmak için SQL üzerindeki temel işlemleri beraber inceleyelim.

### Veri Tabanı ve Örnek Tablo Oluşturulması
```
Function createDataBase([string]$db) {
    Try {
        If (!(Test-Path $db)) {
        
            $CONN = New-Object -TypeName System.Data.SQLite.SQLiteConnection
  
            $CONN.ConnectionString = "Data Source=$db"
            $CONN.Open()

            $createTableQuery = "CREATE TABLE test(
            ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
            name              TEXT    NULL,
            surname           TEXT    NULL,
            number            TEXT    NULL,
            address           TEXT    NULL
            );"
  
            $CMD = $CONN.CreateCommand()
            $CMD.CommandText = $createTableQuery
            $CMD.ExecuteNonQuery()
            $CMD.CommandText = $createUniqueIndex
            $CMD.ExecuteNonQuery()
  
            $CMD.Dispose()
            $CONN.Close()
            Write-Host "Veri tabanı başarıyla oluşturuldu."
  
        } Else {
            Write-Host "Veri tabanı zaten var."
        }
  
    } Catch {
        Write-Host "Veri tabanı oluşturulamadı !"
    }
}
Add-Type -Path "C:\Windows\sqlite\System.Data.SQLite.dll"
createDataBase "C:\Windows\db\testVT.sqlite"
```
Yukarıdaki Powershell betiğinde kısaca test adında bir veri tabanı oluşturuyor, bu veri tabanının içine de id, ad, soyad, numara ve adres kolonlarını içeren bir tablo ekliyoruz.

### Tabloya Veri Ekleme İşlemi

```
Function insertDatabase([string]$db, [System.Collections.ArrayList]$rows) {
  
    Try {
        If (Test-Path $db) {
        
            $CONN = New-Object -TypeName System.Data.SQLite.SQLiteConnection
  
            $CONN.ConnectionString = "Data Source=$db"
            $CONN.Open()
  
            $CMD = $CONN.CreateCommand()
            ForEach($row in $rows) {
                $sql = "INSERT OR REPLACE INTO test (ID,name,surname,number,address)"
                $sql += " VALUES ((select ID from test where number = @number),@name,@surname,@number,@address);"

                $CMD.Parameters.AddWithValue("@ID", $NULL)
                $CMD.Parameters.AddWithValue("@name", $row.name)
                $CMD.Parameters.AddWithValue("@surname", $row.surname)
                $CMD.Parameters.AddWithValue("@number", $row.number)
                $CMD.Parameters.AddWithValue("@address", $row.address)
  
                $CMD.CommandText = $sql
                $CMD.ExecuteNonQuery()
            }
  
            $CMD.Dispose()
            $CONN.Close()
  
            Write-Host "Kayıtlar başarıyla eklendi."
  
        } Else {
            Write-Host "Veri tabanına ulaşılamıyor."
        }
  
    } Catch {
        Write-Host "Kayıtlar veri tabanına eklenemedi."
    }
}

Add-Type -Path "C:\Windows\sqlite\System.Data.SQLite.dll"
$Rows = New-Object System.Collections.ArrayList
$Rows.Add(@{'name'='Zeki Ahmet'; 'surname'= 'Bayar'; 'number'='5986'; 'address'='127.0.0.1'})
insertDatabase "C:\Windows\db\testVT.sqlite" $Rows
```
Eklenmek istenen satırlar, main aşamasında tanımlanan **Rows** listesine add methodu yardımı ile eklenip, insertDatabase fonksiyonuna gönderilmelidir. insertDatabase fonksiyonu eğer verilen numara tabloda başka bir numara ile aynı ise onu güncelleyecek, daha önceden böyle bir satır eklenmediyse yenisini ekleyecektir.

### Tablonun Okunması
```
Function queryDatabase([string]$db, [string]$sql) {
  
    Try {
        If (Test-Path $db) {
  
            $CONN = New-Object -TypeName System.Data.SQLite.SQLiteConnection
            $CONN.ConnectionString = "Data Source=$db"
            $CONN.Open()
  
            $CMD = $CONN.CreateCommand()
            $CMD.CommandText = $sql
  
            $ADAPTER = New-Object  -TypeName System.Data.SQLite.SQLiteDataAdapter $CMD
            $DATA = New-Object System.Data.DataSet
  
            $ADAPTER.Fill($DATA)
  
            $TABLE = $DATA.Tables
  
            ForEach ($t in $TABLE){
                Write-Output $t
            }
  
            $CMD.Dispose()
            $CONN.Close()
  
        } Else {
            Write-Host "Veritabanı bulunamadı."
        }
  
    } Catch {
        Write-Host "Sorgu gönderilemiyor."
    }
}
Add-Type -Path "C:\Windows\sqlite\System.Data.SQLite.dll"
$Query = "Select * From test"
queryDatabase "C:\Windows\db\testVT.sqlite" $Query 
```
Bu kısımda da oluşturduğumuz veri tabanına eklediğimiz satırları kontrol etmek için basit bir select ifadesini veri tabanına nasıl gönderebileceğimizi gördük. Query değişkenine başka sql sorguları yazarak onların da çıktılarını bu fonksiyon yardımı ile görebilirsiniz.

Bu dokümanda kullanılan fonksiyonlar [buradaki](https://www.darkartistry.com/2019/08/create-insert-and-query-sqlite-with-powershell/) bağlantıdan uyarlanmıştır.