我在调试时通过C#连接到Oracle,得到以下错误: Oracle.ManagedDataAccess.Client.OracleException:"ORA-01843: not a valid month“。我以为这就是路线。改变通过url获取变量的方式并没有什么帮助。
Oracle过程:
PROCEDURE TestSelect(YEARp IN INT, MONTHp IN INT, pResult OUT SYS_REFCURSOR) IS
BEGIN
OPEN pResult FOR
SELECT SUM(LOAD_MATERIALS), REG_DATE
FROM PRODUCTION
WHERE EXTRACT(MONTH FROM REG_DATE) = EXTRACT(MONTH FROM TO_DATE(MONTHp, 'MM')) AND EXTRACT(YEAR FROM REG_DATE) = EXTRACT(YEAR FROM TO_DATE(YEARp, 'YYYY'))
GROUP BY REG_DATE;
END TestSelect;C#:
[HttpGet("test")]
public List<Charts> GetCertainEmployees(int month, int year)
{
List<Charts> SelectPerem = new List<Charts>();
string conString = "User Id=*; Password=*; Data Source=*";
using (OracleConnection con = new OracleConnection(conString))
{
using (OracleCommand cmd = con.CreateCommand())
{
try
{
con.Open();
cmd.BindByName = true;
cmd.CommandText = "PACKAGE_PRACTICE.TestSelect";
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("YEARp", OracleDbType.Int32, month, ParameterDirection.Input);
cmd.Parameters.Add("MONTHp", OracleDbType.Int32, year, ParameterDirection.Input);
var pResult = new OracleParameter("pResult", OracleDbType.RefCursor, ParameterDirection.Output);
cmd.Parameters.Add(pResult);
cmd.ExecuteNonQuery();
var res = (OracleRefCursor)pResult.Value;
var reader = res.GetDataReader();
while (reader.Read())
{
Charts s = new Charts();
s.LOAD_MATERIALS = Convert.ToInt32(reader[0]);
s.REG_DATE = Convert.ToString(reader[1]);
SelectPerem.Add(s);
}
}
finally
{
con.Close();
con.Dispose();
}
}
}
return SelectPerem;
}错误出现在下面这一行:
while (reader.Read()) {发布于 2021-05-17 02:20:35
我解决了这个问题。变量在以下行中混合在一起:
cmd.Parameters.Add("YEARp", OracleDbType.Int32, month, ParameterDirection.Input);
cmd.Parameters.Add("MONTHp", OracleDbType.Int32, year, ParameterDirection.Input);注意!感谢大家的宝贵时间和回答!
https://stackoverflow.com/questions/67559595
复制相似问题