Here is query code from MySQL Workbench:
INSERT INTO sockets (socket_name)
VALUES (1155);
SET @sockets_last_id = LAST_INSERT_ID();
INSERT INTO firms (firm)
VALUES ('Test-Firm');
SET @firms_last_id = LAST_INSERT_ID();
INSERT INTO partnames (partname)
VALUES ('Test-Model');
SET @partnames_last_id = LAST_INSERT_ID();
INSERT INTO baseboards (socket_id, firm_id, partname_id, ramslots_int, ramslots_str)
VALUES (@sockets_last_id, @firms_last_id, @partnames_last_id, 4, 'RamSlots-test');
When I execute it from MySQL Workbench it works just fine. But when I try to execute same query from powershell script
[void][system.reflection.Assembly]::LoadFrom("D:MySql.Data.dll")
# | Server name, Port, Username, Password, etc., to initiate Connection
$ConnectionString = "server=$MySQLServerAddress; port=$MySQLServerPort; database=$MySQLDatabase; uid=$MySQLUsername; pwd=$MySQLPassword;"
# | Create New Connection and specify necessary data from above string
$Connection = New-Object MySql.Data.MySqlClient.MySqlConnection($ConnectionString)
# | Open Connection
$Connection.Open()
$insertQuery = @"
INSERT INTO dates (server_date)
VALUES (CURRENT_TIMESTAMP);
INSERT INTO sockets (socket_name)
VALUES (1155);
SET @sockets_last_id = LAST_INSERT_ID();
INSERT INTO firms (firm)
VALUES ('Test-Firm');
SET @firms_last_id = LAST_INSERT_ID();
INSERT INTO partnames (partname)
VALUES ('Test-Model');
SET @partnames_last_id = LAST_INSERT_ID();
INSERT INTO baseboards (socket_id, firm_id, partname_id, ramslots_int, ramslots_str)
VALUES (@sockets_last_id, @firms_last_id, @partnames_last_id, 4, 'RamSlots-test');
"@
$insertCommand = New-Object MySql.Data.MySqlClient.MySqlCommand($insertQuery, $connection)
$insertCommand.ExecuteNonQuery()
$connection.Close()
}
If fails with fatal error exception: “Fatal error encountered during command execution.”
username, database, all same. The problem is with declaring variables, as I understand, Because if I remove all lines which start from @ and last INSERT query:
SET @sockets_last_id = LAST_INSERT_ID();
SET @firms_last_id = LAST_INSERT_ID();
SET @partnames_last_id = LAST_INSERT_ID();
INSERT INTO baseboards (socket_id, firm_id, partname_id, ramslots_int, ramslots_str)
VALUES (@sockets_last_id, @firms_last_id, @partnames_last_id, 4, 'RamSlots-test');
remains of code:
$insertQuery = @"
INSERT INTO dates (server_date)
VALUES (CURRENT_TIMESTAMP);
INSERT INTO sockets (socket_name)
VALUES (1155);
INSERT INTO firms (firm)
VALUES ('Test-Firm');
INSERT INTO partnames (partname)
VALUES ('Test-Model');
"@
works fine.
I guess I must somehow use escape characters maybe for @ symbols? May be Powershell incorrectly process them?