我正在努力通过DAPPER使用ORACLE参数。收到的错误消息是“ORA-00942:表或视图不存在”。
但是代码在没有参数的情况下工作,我怀疑这是一个简单的Oracle参数语法问题。代码如下:
public List<ForecastData>GetByFiscalYear(string fiscalYear)
{
List<ForecastData> queryResults = new List<ForecastData>();
String sqlQuery = @"SELECT RES.FISCALYEAR year FROM RESOURCE_AVAILABILITY RES WHERE RES.FISCALYEAR = :p_fiscalYear";
using (var oraCon = new OracleConnection(System.Configuration.ConfigurationManager.ConnectionStrings["Oracle_HRZD"].ToString()))
{
oraCon.Open();
queryResults = oraCon.Query<ForecastData>(sqlQuery, new { p_fiscalYear = fiscalYear }).ToList();
}
return new List<ForecastData>(queryResults);
}
非常感谢任何帮助......
答案 0 :(得分:1)
通常,ORA-00942正是它所说的,它无法找到您选择的表/视图(RESOURCE_AVAILABILITY)。因此,如果它是另一个模式,那么它不在您登录的用户的模式中,或者用户未在表/视图上被授予SELECT。
但是你说如果删除WHERE RES.FISCAL_YEAR :p_fiscalyear
,那么它就可以了。所以看起来你对表有选择权限。您的意思是删除整个选择或测试的地方输入固定字符串,如WHERE RES.FISCAL_YEAR='2016'
?
我的另一个重要提示是运行Wireshark并查看实际发送到数据库的内容,通常是在端口1521上连接过滤器。
答案 1 :(得分:1)
答案是使用完全限定的数据库对象名称,包括架构。谢谢你的帮助。