如何将日期时间转换为OracleTimeStamp
我有一个问题,我无法使用ODP.NET从数据库运行函数,因为我无法将其中一个参数转换为时间戳。
我正在使用:ODAC121010Xcopy_32bit ODP.NET4
我检查了很多问题,我也尝试将日期时间对象转换为字符串格式来传递它。 我已经花了几个小时了,老实说不知道我是否错过了一些东西。 这似乎是这样的常识,我无法弄清楚为什么这不起作用,任何帮助都将不胜感激。
这是我的代码:
using (var Command = new OracleCommand("PMH.QueryGetSql", Connection))
{
Command.CommandType = CommandType.StoredProcedure;
Connection.Open();
OracleTimeStamp ots = new OracleTimeStamp(DateTime.Now);
Command.Parameters.Add("return", OracleDbType.Varchar2, ParameterDirection.ReturnValue);
Command.Parameters.Add("a", OracleDbType.Int32, ParameterDirection.Input).Value = 1001;
Command.Parameters.Add("b", OracleDbType.TimeStamp, ParameterDirection.Input).Value = ots;
Command.ExecuteNonQuery();
Console.WriteLine(Command.Parameters["return"].Value);
Console.WriteLine("Completed");
}
这是我得到的异常:
Oracle.DataAccess.Client.OracleException ORA-06502:PL / SQL:数值或值err或:字符串缓冲区太小ORA-06512:在Oracle.DataAccess.Client.OracleException.HandleErrorH的第1行elper(Int32 errCode,OracleConnection conn ,IntPtr opsErrCtx,OpoSqlValCtx * pOpo SqlValCtx,Object src,String procedure,Boolean bCheck,Int32 isRecoverable)at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode,Oracle Connection conn,String procedure,IntPtr opsErrCtx,OpoSqlValCtx * pOpoSqlValCtx,Object src,布尔bCheck)在Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery()
最后,这是我试图运行的函数:
FUNCTION QueryGetSql(nQueryId INTEGER,dSyncFromTimeStamp TIMESTAMP DEFAULT NULL) RETURN VARCHAR2 IS
--nResult INTEGER := 0;
sQuerySql VARCHAR2(32767);
sTableName VARCHAR2(100);
sPKName VARCHAR2(100);
sQueryColumns VARCHAR2(32767);
sConditions VARCHAR2(32767);
sNullColumns VARCHAR2(32767);
CURSOR qc_cur IS
SELECT column_name
FROM pmh$_app_query_columns
WHERE query_id = nQueryId
ORDER BY seq ASC;
另外请注意,尽管我有权访问oracle代码,但我没有编写它,因此不希望更改它。
您必须指定返回值的最大大小,即
Command.Parameters.Add("return", OracleDbType.Varchar2, 1000, null, ParameterDirection.ReturnValue);
“null”是初始值,在VB.NET中你必须使用“Nothing”来代替。
链接地址: http://www.djcxy.com/p/67187.html上一篇: How to Convert Datetime to OracleTimeStamp
下一篇: c#