【发布时间】:2016-08-08 14:24:26
【问题描述】:
我是第一次使用存储过程。我很难弄清楚这背后的问题。 如果我从 PhpMyAdmin 手动执行存储过程,它工作正常。但是当我将它与 C# 程序一起使用时。它显示错误。
存储过程:
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
当我使用这些参数执行此过程时:
var reader = connection.StoredProcedureInOut("Save", new String[] { "0", theDate, clientId, randomNumber.ToString(), totalDebit.ToString(), description }, new String[] { "id", "date", "cId","randomNum", "debitAmount", "descr" });
定义是:
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;
}
我收到这条消息:
OUT or INOUT argument 1 for routine noorani.Save is not a variable or NEW pseduo-variable in Before trigger
【问题讨论】:
-
尝试将第一个参数设置为输出参数。看看这个答案,例如Retrieving SQL Server output variables in c#
标签: c# mysql stored-procedures