2015-09-03 2 views
0

J'essaie de renvoyer le dernier ID inséré après l'exécution d'une instruction MySQL INSERT avec PowerShell. Mon INSERT fonctionne correctement et les données sont insérées dans la base de données comme prévu. Le problème que j'ai est saisissant l'identification de cette rangée qui vient d'être insérée.Impossible de renvoyer le dernier ID connu après une instruction INSERT

Mon code est ci-dessous:

./MySQL.ps1 -Query "insert into table (field1,field2,field3,field4) values ('$val1','$val2','$val3','$val4')" 
$last_id = ./MySQL.ps1 -Query "SELECT LAST_INSERT_ID()" 
Write-Host "Last ID: $last_id" 

retours:

Last ID: System.Data.DataRow 

MySQL.ps1:

Param(
    [Parameter(
    Mandatory = $true, 
    ParameterSetName = '', 
    ValueFromPipeline = $true)] 
    [string]$Query 
) 

$MySQLAdminUserName = 'root' 
$MySQLAdminPassword = 'password' 
$MySQLDatabase = 'storage_manager' 
$MySQLHost = 'localhost' 
$ConnectionString = "server=" + $MySQLHost + ";port=3306;uid=" + 
        $MySQLAdminUserName + ";pwd=" + $MySQLAdminPassword + 
        ";database=" + $MySQLDatabase 

try { 
    [void][System.Reflection.Assembly]::LoadWithPartialName("MySql.Data") 
    $Connection = New-Object MySql.Data.MySqlClient.MySqlConnection 
    $Connection.ConnectionString = $ConnectionString 
    $Connection.Open() 

    $Command = New-Object MySql.Data.MySqlClient.MySqlCommand($Query, $Connection) 
    $DataAdapter = New-Object MySql.Data.MySqlClient.MySqlDataAdapter($Command) 
    $DataSet = New-Object System.Data.DataSet 
    $RecordCount = $dataAdapter.Fill($dataSet, "data") 
    $DataSet.Tables[0] 
} catch { 
    Write-Host "ERROR : Unable to run query : $query `n$Error[0]" 
} finally { 
    $Connection.Close() 
} 

J'ai aussi essayé avec ce qui suit et obtenir le même dans fo.

SELECT max(id) FROM mytab WHERE category = 1 

Répondre

0

Votre fonction renvoie un objet DataTable, pas seulement une valeur. Pour obtenir la valeur que vous devez sélectionner via le nom du champ (dans votre cas, le nom de la fonction SQL):

$result = ./MySQL.ps1 -Query "SELECT LAST_INSERT_ID()" 
$last_id = $result.'LAST_INSERT_ID()' 
Write-Host "Last ID: $last_id" 

Les guillemets autour LAST_INSERT_CD() dans la deuxième ligne sont nécessaires, parce que le nom de la propriété comprend entre parenthèses et sans guillemets PowerShell interpréterait LAST_INSERT_ID() comme une méthode au lieu d'une propriété. Vous pouvez éviter les guillemets en spécifiant un alias sans parenthèses (ou d'autres caractères spéciaux):

$result = ./MySQL.ps1 -Query "SELECT LAST_INSERT_ID() AS foo" 
$last_id = $result.foo 
Write-Host "Last ID: $last_id"
+0

Cela a fonctionné parfaitement. À votre santé. – CassOwary