Powershell and SQL commands / SQL transactions

Hallo zusammen,

Ich habe mal ein bisschen mit SQL und Powershell rumgespielt.

Man sieht im SQL Management Studio, dass es nur eine Zeile gibt.


###############################################################################
# SQL Query's with Powershell
###############################################################################
#Setup SQL Connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
#$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Uid=myusername;Pwd=mypassword"
#Use this Windows Authentication
$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Integrated Security=SSPI;"  
$SqlConnection.Open()
 
#SQL SELECT
$qSQL = "SELECT fID, fVorname, fNachname FROM tUsers"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $qSQL
$SqlCmd.Connection = $SqlConnection
$SQLReader = $SqlCmd.ExecuteReader()
while ($sqlReader.Read())
{
$Count = $sqlReader["SearchForPST"]
}
$SQLReader.close()

#SQL INSERT
$qSQL = "INSERT INTO tUsers (fVorname, fNachname) VALUES ('Hans', 'Muster')"
$SqlCmd.CommandText = $qSQL
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result INSERT: " $Result

#SQL UPDATE
$qSQL = "UPDATE tUsers SET fVorname = 'Fritz', fNachname = 'Meier' WHERE fNachname = 'Muster'"
$SqlCmd.CommandText = $qSQL
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result UPDATE: " $Result

$SqlConnection.Close()

Nach ausführen, des Scripts wurde eine Zeile eingefügt und dann ein Update auf der eingefügten Zeile ausgeführt.

SQL Transaction

Nun bauen wir noch SQL Transactions ein. Man sieht dass nun drei Zeilen in der Datenbank vorhanden sind.

###############################################################################
# SQL Transcations with Powershell
###############################################################################
#Setup SQL Connection
$SqlConnection = New-Object System.Data.SqlClient.SqlConnection
#$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Uid=myusername;Pwd=mypassword"
#Use this Windows Authentication
$SqlConnection.ConnectionString = "Data Source=ICESRV02;database=db_test;Integrated Security=SSPI;"  
$SqlConnection.Open()

#Begin Transaction
Write-Host "Begin Transaction"
$transaction = $SqlConnection.BeginTransaction("MyTransaction")


#SQL SELECT
$qSQL = "SELECT fID, fVorname, fNachname FROM tUsers"
$SqlCmd = New-Object System.Data.SqlClient.SqlCommand
$SqlCmd.CommandText = $qSQL
$SqlCmd.Transaction = $transaction
$SqlCmd.Connection = $SqlConnection
$SQLReader = $SqlCmd.ExecuteReader()
$sqlReader.Read()
$Count = $sqlReader["SearchForPST"]
$SQLReader.close()
   
#SQL INSERT
$qSQL = "INSERT INTO tUsers (fVorname, fNachname) VALUES ('Hans', 'Muster')"
$SqlCmd.CommandText = $qSQL
$SqlCmd.Transaction = $transaction
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result INSERT: " $Result

#SQL UPDATE
$qSQL = "UPDATE tUsers SET fVorname = 'Karl', fNachname = 'Klammer' WHERE fNachname = 'Muster'"
$SqlCmd.CommandText = $qSQL
$SqlCmd.Transaction = $transaction
$Result = $SqlCmd.ExecuteNonQuery()
Write-Host "Result UPDATE: " $Result

#End Transaction
Write-Host "End Transaction"
$transaction.Commit()
#$transaction.Rollback()

$SqlConnection.Close()

Je nachdem ob am Ende des Scripts ein Commit oder ein Rollback steht werden Daten verändert oder eben nicht.

Grüsse
Andres Bohren