Ich arbeite mit gespeicherten Prozeduren zum ersten Mal. Ich stehe vor der schwierigen Zeit, ein Problem dahinter zu finden. Wenn ich gespeicherte Prozedur von PhpMyAdmin manuell ausführen, funktioniert es gut. Aber wenn ich es mit C# -Programm benutze. Es zeigt einen Fehler an.Gespeicherte MySQL-Prozedur: Funktioniert manuell & nicht mit C#
Stored Procedure:
CREATE DEFINER=`root`@`localhost` PROCEDURE `Save`(INOUT `id` INT, IN `cId` INT, IN `date` DATE, IN `randomNum` INT, IN `debitAmount` VARCHAR(20), IN `descr` VARCHAR(255))
NO SQL
BEGIN
INSERT INTO dc (status, dcDate, clientId) VALUES ('1', date, cId);
SET id = last_insert_id();
INSERT INTO bill (dcId, clientId, billDate, referenceNo) VALUES (
id,
clientId,
date,
randomNum
);
INSERT INTO ledger (clientId, debit, ledgerDate, description, dcId, referenceNo)
VALUES (
cId,
debitAmount,
date,
descr,
id,
randomNum
);
SELECT @id;
END
Wenn ich ausführen dieses Verfahren mit diesen Parametern:
var reader = connection.StoredProcedureInOut("Save", new String[] { "0", theDate, clientId, randomNumber.ToString(), totalDebit.ToString(), description }, new String[] { "id", "date", "cId","randomNum", "debitAmount", "descr" });
Definition ist:
public MySqlDataReader StoredProcedureInOut(String procedureName, String[] values, String[] keys)
{
openConnection();
MySqlDataReader reader;
try
{
MySqlCommand cmd = new MySqlCommand(procedureName, connection);
cmd.CommandType = CommandType.StoredProcedure;
for (int i = 0; i < values.Length; i++)
{
cmd.Parameters.AddWithValue("@" + keys[i], values[i]);
}
reader = cmd.ExecuteReader();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
reader = null;
}
return reader;
}
ich diese Meldung:
Versuchen Sie, den ersten Parameter als Ausgabeparameter festzulegen. Werfen Sie einen Blick auf diese Antwort zum Beispiel [Abrufen von SQL Server-Ausgabevariablen in C#] (http://stackoverflow.com/questions/8389192/retrieving-sql-server-output-variables-in-c-sharp) –