带有Dapper问题的Oracle参数

时间:2016-10-09 21:32:32

标签: c# oracle asp.net-web-api dapper

我正在努力通过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);
    }

非常感谢任何帮助......

2 个答案:

答案 0 :(得分:1)

通常,ORA-00942正是它所说的,它无法找到您选择的表/视图(RESOURCE_AVAILABILITY)。因此,如果它是另一个模式,那么它不在您登录的用户的模式中,或者用户未在表/视图上被授予SELECT。

但是你说如果删除WHERE RES.FISCAL_YEAR :p_fiscalyear,那么它就可以了。所以看起来你对表有选择权限。您的意思是删除整个选择或测试的地方输入固定字符串,如WHERE RES.FISCAL_YEAR='2016'

我的另一个重要提示是运行Wireshark并查看实际发送到数据库的内容,通常是在端口1521上连接过滤器。

答案 1 :(得分:1)

答案是使用完全限定的数据库对象名称,包括架构。谢谢你的帮助。