一个Oracle更新存储过程我有一个封装内的2个甲骨文prodecures这样的:调用从C#
PROCEDURE INSERT_LOG (
message_id in VARCHAR2,
mq_request in VARCHAR2,
req_timestamp in VARCHAR2
)
IS
BEGIN
INSERT INTO TESTSCHEMA.MY_MESSAGE_LOG (MESSAGE_ID,MQ_REQUEST,REQ_TIMESTAMP)
VALUES(message_id,mq_request,TO_DATE(req_timestamp,'DD-MM-YYYY HH24:MI:SS'));
commit;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE_APPLICATION_ERROR (-20000, 'Error: INSERT_LOG() '||SQLERRM);
END;
PROCEDURE UPDATE_LOG (
message_id IN VARCHAR2,
mq_response IN VARCHAR2,
resp_identifier IN VARCHAR2,
resp_timestamp IN VARCHAR2,
req_timestamp IN VARCHAR2
)
IS
BEGIN
UPDATE TESTSCHEMA.MY_MESSAGE_LOG A
SET
A.MQ_RESPONSE = mq_response,
A.RESP_IDENTIFIER =resp_identifier,
A.RESP_TIMESTAMP = TO_DATE(resp_timestamp,'DD-MM-YYYY HH24:MI:SS')
WHERE
A.MESSAGE_ID = message_id
and A.REQ_TIMESTAMP = TO_DATE(req_timestamp,'DD-MM-YYYY HH24:MI:SS');
commit;
EXCEPTION
WHEN OTHERS
THEN
ROLLBACK;
RAISE_APPLICATION_ERROR (-20000, 'Error: UPDATE_LOG() '||SQLERRM);
END;
我试图从我的C#代码中调用这些过程。 问题是插入过程工作正常,但更新过程不更新任何行。在调查时,我注意到虽然我从C#代码设置存储过程的变量,但这些变量的值在数据库端反映为空或空。这是我的更新过程的C#代码。
try
{
using (DbConnection connection = new DbConnection())
{
var comm = new OracleCommand
{
Connection = connection.OpenUsbAppsSchema(),
CommandText = <My Procedure Name>,
CommandType = CommandType.StoredProcedure
};
var param = new OracleParameter[5];
param[0] = new OracleParameter("message_id", OracleDbType.Varchar2, 500, ParameterDirection.Input) { Value = messageId };
param[1] = new OracleParameter("mq_response", OracleDbType.Varchar2, 2000, ParameterDirection.Input) { Value = mqResponse };
param[2] = new OracleParameter("resp_identifier", OracleDbType.Varchar2, 200, ParameterDirection.Input) { Value = identifier };
param[3] = new OracleParameter("resp_timestamp", OracleDbType.Varchar2,500, ParameterDirection.Input) { Value = resposeTimeStamp };
param[4] = new OracleParameter("req_timestamp", OracleDbType.Varchar2, 500, ParameterDirection.Input) {Value = requestTimeStamp};
comm.Parameters.AddRange(param);
comm.ExecuteNonQuery();
}
}
catch (Exception ex)
{
throw ex;
}
什么是我做错了什么指针?
JustinCave的答案是点亮的。直到我看到[那个邪恶的'catch'子句](http://stackoverflow.com/a/881489/158074),我才会说C#方面没有错。除此之外,一切都是正确的,你只需要改变'UPDATE_LOG'上的参数名称...... – rsenna