C# Oracle参数与简洁问题

C# Oracle参数与简洁问题,c#,oracle,asp.net-web-api,dapper,C#,Oracle,Asp.net Web Api,Dapper,我正在努力通过DAPPER使用ORACLE参数。收到的错误消息是“ORA-00942:表或视图不存在” 但是,代码在没有参数的情况下工作,我怀疑这是一个简单的Oracle参数语法问题。守则如下: public List<ForecastData>GetByFiscalYear(string fiscalYear) { List<ForecastData> queryResults = new List<ForecastData>

我正在努力通过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);
    }
公共列表GetByFiscalyear(字符串fiscalYear)
{
List queryResults=新列表();
字符串sqlQuery=@“从资源可用性RES中选择RES.FISCALYEAR year,其中RES.FISCALYEAR=:p_FISCALYEAR”;
使用(var oraCon=neworacleconnection(System.Configuration.ConfigurationManager.connectionString[“Oracle_HRZD”].ToString())
{
oraCon.Open();
queryResults=oraCon.Query(sqlQuery,new{p_fiscalYear=fiscalYear}).ToList();
}
返回新列表(查询结果);
}

非常感谢您的帮助……

通常,ORA-00942就是它所说的,它找不到您正在选择的表/视图(资源可用性)。因此,它不在您登录的用户的模式中,或者该用户未被授予在表/视图上选择的权限(如果它是另一个模式)

但是你说如果你删除了
其中RES.FISCAL\u YEAR:p\u fiscalyear
,那么它就起作用了。因此,您似乎对表具有选择权限。您的意思是删除整个where选择还是输入固定字符串,如
where RES.FISCAL_YEAR='2016'


我的另一个首要技巧是运行Wireshark并查看真正发送到数据库的内容,通常是通过端口1521进行连接。通常,ORA-00942就是它所说的,它找不到您正在选择的表/视图(资源可用性)。因此,它不在您登录的用户的模式中,或者该用户未被授予在表/视图上选择的权限(如果它是另一个模式)

但是你说如果你删除了
其中RES.FISCAL\u YEAR:p\u fiscalyear
,那么它就起作用了。因此,您似乎对表具有选择权限。您的意思是删除整个where选择还是输入固定字符串,如
where RES.FISCAL_YEAR='2016'


我的另一个最重要的技巧是运行Wireshark并查看真正发送到数据库的内容,通常在端口1521上进行连接。答案是使用完全限定的数据库对象名,包括模式。感谢您的帮助。

答案是使用完全限定的数据库对象名,包括模式。谢谢您的帮助。

您的select声明似乎有点错误。你的意思是:从RES中选择RES.FISCALYEAR,RES.FISCALYEAR=:p_FISCALYEAR";查询使用列名别名,并在删除参数后成功运行。我的问题是关于Oracle参数。错误是关于表名,而不是参数。如果硬编码年份值,是否可以运行查询?是否尝试将架构明确添加到查询中<代码>从架构中选择x。资源可用性?您的Select语句似乎非常错误。你的意思是:从RES中选择RES.FISCALYEAR,RES.FISCALYEAR=:p_FISCALYEAR";查询使用列名别名,并在删除参数后成功运行。我的问题是关于Oracle参数。错误是关于表名,而不是参数。如果硬编码年份值,是否可以运行查询?是否尝试将架构明确添加到查询中
从架构中选择x。资源可用性
?如果用户没有权限,被否决的人应该知道Oracle不会以
拒绝访问
的答复。如果有人没有访问表或视图的权限,则错误将表明该表丢失被否决的人应该知道,如果用户没有权限,Oracle不会以
拒绝访问
回复。如果某人没有访问表或视图的权限,则错误将表示缺少该表