.net ORA-00923:FROM关键字未在预期位置找到,但它在Oracle Toad中有效

.net ORA-00923:FROM关键字未在预期位置找到,但它在Oracle Toad中有效,.net,visual-studio-2010,oracle,exception,.net,Visual Studio 2010,Oracle,Exception,我在x64机器上使用VS2010和Oracle作为我的数据库,但是我的.NET代码有问题。这是: 它只是从DataGrid选择函数的Web服务调用的函数 Public Shared Function get_lista(ByVal i_filtros As CBoletaGarantiaListafiltro, ByVal i_usuario As CUsuario, ByVal i_con As OracleConnection, ByVal i_tran As OracleTransacti

我在x64机器上使用VS2010和Oracle作为我的数据库,但是我的.NET代码有问题。这是:

它只是从DataGrid选择函数的Web服务调用的函数

Public Shared Function get_lista(ByVal i_filtros As CBoletaGarantiaListafiltro, ByVal i_usuario As CUsuario, ByVal i_con As OracleConnection, ByVal i_tran As OracleTransaction, ByRef o_error As CError) As List(Of CBoletaGarantiaLista)
        Dim sql As String
        sql = " select  "
        sql = sql & " a.id_proyecto  "
        sql = sql & " ,a.id_solicitud  "
        sql = sql & " ,a.fecha_ingreso "
        sql = sql & " ,a.usuario_ingreso "
        sql = sql & " ,a.estado  "
        sql = sql & " ,a.cod_motivo  "
        sql = sql & " ,a.beneficiario  "
        sql = sql & " ,a.tipo_obra_bol  "
        sql = sql & " ,a.tipo_plazo  "
        sql = sql & " ,a.vigencia "
        sql = sql & " ,a.monto "
        sql = sql & " ,a.codigo_moneda  "
        sql = sql & " ,a.flex  "
        sql = sql & " ,a.fecha_esperada "
        sql = sql & " ,a.tomador "
        sql = sql & " ,b.sdesc tipo_obra_desc "
        sql = sql & " ,c.sdesc tipo_plazo_desc "
        sql = sql & " ,d.sdesc tomador_desc "
        sql = sql & " ,e.sdesc beneficiario_desc "
        sql = sql & " ,f.sdesc codigo_moneda_desc"
        sql = sql & " ,g.nombre nombre_proyecto"
        sql = sql & " ,a.etapa "
        sql = sql & " ,h.sdesc estado_desc "
        sql = sql & " ,a.glosa  "
        sql = sql & " ,i.nro_boleta  "
        sql = sql & "  from abd_bol_garantia a "
        sql = sql & " , abd_codigos b   "
        sql = sql & " , abd_codigos c "
        sql = sql & " , abd_codigos d "
        sql = sql & " , abd_codigos e "
        sql = sql & " , abd_monedas f "
        sql = sql & " , abd_proyectos g "
        sql = sql & " , abd_codigos h "
        sql = sql & " , abd_bol_garantia_obtencion i "
        sql = sql & " where  "
        sql = sql & "    b.tipo=65 "
        sql = sql & " and b.codigo=a.tipo_obra_bol "
        sql = sql & " and c.tipo=66 "
        sql = sql & " and c.codigo=a.tipo_plazo "
        sql = sql & " and d.tipo=67 "
        sql = sql & " and d.codigo=a.tomador "
        sql = sql & " and e.tipo=68 "
        sql = sql & " and e.codigo=a.beneficiario "
        sql = sql & " and f.ID_MONEDA=a.codigo_moneda "
        sql = sql & " and g.ID_proyecto=a.id_proyecto "
        sql = sql & " and h.tipo=71 "
        sql = sql & " and h.codigo=a.estado "
        sql = sql & " and a.id_solicitud=i.id_solicitud(+)"


        If Not i_filtros.estado Is Nothing Then
            sql = sql & " and a.estado=:estado "
        End If

        sql = sql & " and a.vigencia>=:vigencia_ini "
        sql = sql & " and a.vigencia<:vigencia_fin "

        If Not i_filtros.id_proyecto Is Nothing Then
            sql = sql & " and a.id_proyecto=:id_proyecto "
        End If

        If Not i_filtros.id_solicitud Is Nothing Then
            sql = sql & " and a.id_solicitud=:id_solicitud "
        End If

        sql = sql & " order by  a.id_solicitud "

        Dim comando As New OracleCommand(sql, i_con, i_tran)


        comando.Parameters.Add("vigencia_ini", OracleType.DateTime).Value = i_filtros.fecha_vigencia_ini.Date
        comando.Parameters.Add("vigencia_fin", OracleType.DateTime).Value = i_filtros.fecha_vigencia_fin.Date.AddDays(1)


        If Not i_filtros.estado Is Nothing Then
            comando.Parameters.Add("estado", OracleType.Int32).Value = i_filtros.estado
        End If


        If Not i_filtros.id_proyecto Is Nothing Then
            comando.Parameters.Add("id_proyecto", OracleType.Int32).Value = i_filtros.id_proyecto
        End If

        If Not i_filtros.id_solicitud Is Nothing Then
            comando.Parameters.Add("id_solicitud", OracleType.Int32).Value = i_filtros.id_solicitud
        End If


        Dim leer As OracleDataReader


        leer = comando.ExecuteReader


        Dim x_lista As New List(Of CBoletaGarantiaLista)
        While leer.Read
            Dim a As New CBoletaGarantiaLista

            If Not leer.IsDBNull(0) Then
                a.id_proyecto = leer.GetInt32(0)
            End If

            If Not leer.IsDBNull(1) Then
                a.id_solicitud = leer.GetInt32(1)
            End If

            If Not leer.IsDBNull(2) Then
                a.fecha_ingreso = leer.GetDateTime(2)
            End If

            If Not leer.IsDBNull(3) Then
                a.usuario_ingreso = leer.GetString(3)
            End If

            If Not leer.IsDBNull(4) Then
                a.estado = leer.GetInt32(4)
            End If

            If Not leer.IsDBNull(5) Then
                a.cod_motivo = leer.GetInt32(5)
            End If

            If Not leer.IsDBNull(6) Then
                a.beneficiario = leer.GetInt32(6)
            End If

            If Not leer.IsDBNull(7) Then
                a.tipo_obra_bol = leer.GetInt32(7)
            End If

            If Not leer.IsDBNull(8) Then
                a.tipo_plazo = leer.GetInt32(8)
            End If

            If Not leer.IsDBNull(9) Then
                a.vigencia = leer.GetDateTime(9)
            End If

            If Not leer.IsDBNull(10) Then
                a.monto = leer.GetDouble(10)
            End If

            If Not leer.IsDBNull(11) Then
                a.codigo_moneda = leer.GetInt32(11)
            End If

            If Not leer.IsDBNull(12) Then
                a.flex = leer.GetInt32(12)
            End If

            If Not leer.IsDBNull(13) Then
                a.fecha_esperada = leer.GetDateTime(13)
            End If

            If Not leer.IsDBNull(14) Then
                a.tomador = leer.GetInt32(14)
            End If

            If Not leer.IsDBNull(15) Then
                a.tipo_obra_desc = leer.GetString(15)
            End If

            If Not leer.IsDBNull(16) Then
                a.tipo_plazo_desc = leer.GetString(16)
            End If

            If Not leer.IsDBNull(17) Then
                a.tomador_desc = leer.GetString(17)
            End If

            If Not leer.IsDBNull(18) Then
                a.beneficiario_desc = leer.GetString(18)
            End If

            If Not leer.IsDBNull(19) Then
                a.codigo_moneda_desc = leer.GetString(19)
            End If

            If Not leer.IsDBNull(20) Then
                a.nombre_proyecto = leer.GetString(20)
            End If

            If Not leer.IsDBNull(21) Then
                a.etapa = leer.GetInt32(21)

                If a.etapa = 1 Then
                    a.etapa_desc = "Aprobacion de Solicitud"
                ElseIf a.etapa = 2 Then
                    a.etapa_desc = "Entrega de Boleta"
                ElseIf a.etapa = 3 Then
                    a.etapa_desc = "Retiro de Boleta"
                ElseIf a.etapa = 4 Then
                    a.etapa_desc = "Devolucion a Tesoreria"
                End If
            End If

            If Not leer.IsDBNull(22) Then
                a.estado_desc = leer.GetString(22)
            End If

            If Not leer.IsDBNull(23) Then
                a.glosa = leer.GetString(23)
            End If

            If Not leer.IsDBNull(24) Then
                a.nro_boleta = leer.GetString(24)
            End If

            x_lista.Add(a)
        End While

        leer.Close()
        Return x_lista
    End Function
公共共享函数get_lista(ByVal i_filtros作为CBoletagarentialsista Filtro,ByVal i_Usario作为CUsuario,ByVal i_con作为OracleConnection,ByVal i_tran作为OracleTransaction,ByRef o_error作为CError)作为列表(属于CBoletagarentialsista)
将sql设置为字符串
sql=“选择”
sql=sql&“a.id\u proyecto”
sql=sql&“a.id\U请求”
sql=sql&“a.fecha\u入口”
sql=sql&“a.usuario\u入口”
sql=sql&“a.estado”
sql=sql&“a.cod\u motivo”
sql=sql&“一个受益人”
sql=sql&“a.tipo_obra_bol”
sql=sql&“a.tipo_plazo”
sql=sql&“a.vigencia”
sql=sql&“a.monto”
sql=sql&“a.codigo_moneda”
sql=sql&“a.flex”
sql=sql&“a.fecha_esperada”
sql=sql&“a.tomador”
sql=sql&“b.sdesc tipo_obra_desc”
sql=sql&“c.sdesc tipo_plazo_desc”
sql=sql&“d.sdesc tomador_desc”
sql=sql&“e.sdesc受益人描述”
sql=sql&,f.sdesc codigo\u moneda\u desc
sql=sql&“g.nombre nombre_proyecto”
sql=sql&“a.etapa”
sql=sql&,h.sdesc estado_desc
sql=sql&“a.glosa”
sql=sql&“i.nro_boleta”
sql=sql&“来自abd_bol_garantia a”
sql=sql&“abd_codigos b”
sql=sql&“,abd_codigos c”
sql=sql&“,abd\u codigos d”
sql=sql&“abd_codigos e”
sql=sql&“,abd_monedas f”
sql=sql&“,abd_proyectos g”
sql=sql&“abd_codigos h”
sql=sql&“abd_bol_garantia_obtencion i”
sql=sql&“where”
sql=sql&“b.tipo=65”
sql=sql&“和b.codigo=a.tipo\u obra\u bol”
sql=sql&“和c.tipo=66”
sql=sql&“和c.codigo=a.tipo_plazo”
sql=sql&“和d.tipo=67”
sql=sql&“和d.codigo=a.tomador”
sql=sql&“和e.tipo=68”
sql=sql&“和e.codigo=a.benginiario”
sql=sql&“和f.ID\u MONEDA=a.codigo\u MONEDA”
sql=sql&“和g.ID\u proyecto=a.ID\u proyecto”
sql=sql&“和h.tipo=71”
sql=sql&“和h.codigo=a.estado”
sql=sql&“和a.id\U请求=i.id\U请求(+)”
如果不是的话,我什么都不是
sql=sql&“和a.estado=:estado”
如果结束
sql=sql&“和a.vigencia>=:vigencia_ini”

sql=sql&“和a.vigencia这是您的第一部分代码应该是什么样子。注意,我可能没有得到完全正确的命令对象重载,但重点是以后分配命令文本

Dim static as String = "Select" & _
" a.id_proyecto" & _
", a.id_solicitud" & _
", a.fecha_ingreso" & _
", a.usuario_ingreso" & _
", a.estado" & _
", a.cod_motivo" & _
", a.beneficiario" & _
", a.tipo_obra_bol" & _
", a.tipo_plazo" & _
", a.vigencia" & _
", a.monto" & _
", a.codigo_moneda" & _
", a.flex" & _
", a.fecha_esperada" & _
", a.tomador" & _
", b.sdesc tipo_obra_desc" & _
", c.sdesc tipo_plazo_desc" & _
", d.sdesc tomador_desc" & _
", e.sdesc beneficiario_desc" & _
", f.sdesc codigo_moneda_desc" & _
", g.nombre nombre_proyecto" & _
", a.etapa" & _
", h.sdesc estado_desc" & _
", a.glosa " & _
", i.nro_boleta" & _
" From " & _
"abd_bol_garantia a inner join " & _
"abd_codigos b on b.codigo = a.tipo_obra_bol inner join " & _
"abd_codigos c on c.codigo = a.tipo_plazo inner join " & _
"abd_codigos d on d.codigo = a.tomador inner join " & _
"abd_codigos e on e.codigo = a.beneficiario inner join " & _
"abd_monedas f on f.ID_MONEDA = a.codigo_moneda inner join " & _
"abd_proyectos g on g.ID_proyecto = a.id_proyecto inner join " & _
"abd_codigos h on h.codigo = a.estado left join " & _
"abd_bol_garantia_obtencion i on a.id_solicitud = i.id_solicitud " & _
"Where " & _
"b.tipo = 65 and " & _
"c.tipo = 66 and " & _
"d.tipo = 67 and " & _
"e.tipo = 68 and " & _
"h.tipo = 71" 

dim execSql as new StringBuilder(static)
Dim comando As New OracleCommand(i_con, i_tran)

execSql.Append(" and a.vigencia >= :vigencia_ini")
execSql.Append(" and a.vigencia < :vigencia_fin")   
comando.Parameters.Add("vigencia_ini", OracleType.DateTime).Value = i_filtros.fecha_vigencia_ini.Date
comando.Parameters.Add("vigencia_fin", OracleType.DateTime).Value = i_filtros.fecha_vigencia_fin.Date.AddDays(1)    


If Not i_filtros.estado Is Nothing Then
    execSql.Append(" and a.estado = :estado")
    comando.Parameters.Add("estado", OracleType.Int32).Value = i_filtros.estado
End If

If Not i_filtros.id_proyecto Is Nothing Then
    execSql.Append(" and a.id_proyecto = :id_proyecto")
comando.Parameters.Add("id_proyecto", OracleType.Int32).Value = i_filtros.id_proyecto
End If

If Not i_filtros.id_solicitud Is Nothing Then
    execSql.Append(" and a.id_solicitud=:id_solicitud")
    comando.Parameters.Add("id_solicitud", OracleType.Int32).Value = i_filtros.id_solicitud
End If

execSql.Append(" Order By  a.id_solicitud")


comando.CommandText = execSql.ToString()
Dim static as String=“Select”&_
“a.id_项目”和_
“,a.id_requestud”&_
“,a.fecha_Ingreo”&_
“,a.usuario_Ingreo”&_
",a.estado"及_
“,a.cod_motivo”&_
“,a.受益人”和_
“,a.tipo_obra_bol”&_
",a.tipo_plazo"及_
",a.vigencia"及_
“,a.monto”和_
“,a.codigo_moneda”&_
“,a.flex”和_
“,a.fecha_esperada”&_
“,a.tomador”和_
“,b.sdesc tipo_obra_desc”&_
“,c.sdesc tipo_plazo_desc”&_
“,d.sdesc tomador_desc”&_
“,e.sdesc受益人描述”和_
“,f.sdesc codigo_moneda_desc”&_
“,g.nombre nombre_proyecto”&_
",a.etapa"及_
“,h.sdesc estado_desc”&_
",a.glosa"及_
“i.nro_boleta”和_
"来自"及_
“abd_bol_garantia内部连接”&_
“b.codigo=a.tipo_obra_bol内部连接上的abd_codigos b”&_
“abd_codigos c on c.codigo=a.tipo_plazo内部连接”&_
“d.codigo=a.tomador内部连接上的abd_codigos d”&_
“abd_codigos e on e.codigo=a.benziario内部连接”&_
“abd_monedas f on f.ID_MONEDA=a.codigo_MONEDA内部联接”&_
“abd_proyectos g on g.ID_proyecto=a.ID_proyecto内部联接”&_
“abd_codigos h on h.codigo=a.estado left join”&_
“abd_bol_garantia_a.id_Clarcud=i.id_Clarcud”和_
"何处"及_
“b.tipo=65和”&_
“c.tipo=66和”&_
“d.tipo=67和”&_
“e.tipo=68和”&_
“h.tipo=71”
dim execSql作为新的StringBuilder(静态)
Dim comando作为新的OracleCommand(i_-con,i_-tran)
execSql.Append(“and a.vigencia>=:vigencia_ini”)
execSql.Append(“和a.vigencia<:vigencia_fin”)
comando.Parameters.Add(“vigencia\u ini”,OracleType.DateTime)。Value=i\u filteros.fecha\u vigencia\u ini.Date
comando.Parameters.Add(“vigencia\u fin”,OracleType.DateTime)。Value=i\u filtros.fecha\u vigencia\u fin.Date.AddDays(1)
如果不是的话,我什么都不是
Append(“and a.estado=:estado”)
comando.Parameters.Add(“estado”,OracleType.Int32).Value=i_filteros.estado
如果结束
如果不是的话,我就什么都不是
Append(“and a.id\u proyecto=:id\u proyecto”)
添加(“id\u proyecto”,OracleType.Int32)。Value=i\u filteros.id\u proyecto
如果结束
如果不是的话,我就什么都不是
execSql.Append(“and a.id\u claircud=:id\u claircud”)
compando.Parameters.Add(“id\u requictud”,OracleType.Int32)。Value=i\u filteros.id\u requictud
如果结束
execSql.Append(“按a.id\U请求的订单”)
comando.CommandText=execSql.ToString()

您很可能有格式错误。您是否尝试在调试器中打印sql字符串,将其粘贴到toad中,然后运行它?是的,我尝试过,效果很好。问题是当我在VS2010上调试/运行它时,您使用的Oracle版本是什么?您应该做的第一件事是删除此语法,这不是Oracle本身推荐的。标准推荐使用rd
内部连接在…
左连接在…
右连接在…
而不是像
a.id\u requestud=i.id\u requestud(+)
那样的“加号”;