首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Oracle.DataAccess.Client.OracleException: ORA-00900:无效的SQL语句

Oracle.DataAccess.Client.OracleException: ORA-00900:无效的SQL语句
EN

Stack Overflow用户
提问于 2021-01-12 03:24:35
回答 1查看 185关注 0票数 0

我使用以下代码创建了一个Oracle SP。如果我从SQL developer执行它,那么它运行时没有任何错误/问题。但是,当我尝试从.NET代码调用相同的SP时,抛出一个异常,并显示消息"Oracle.DataAccess.Client.OracleException: ORA-00900: invalid statement“。

Oracle SP代码:

代码语言:javascript
复制
PROCEDURE sp_UpdateLSR(
    po_Info        OUT VARCHAR2,
    pi_gId         IN VARCHAR2,
    pi_cid         IN VARCHAR2
 ) IS pragma autonomous_transaction;
BEGIN

    UPDATE TableName
    SET colName = 6603
    WHERE colName21 = pi_gId AND COL2 = pi_cid;
    COMMIT;
    
    OPEN po_Info FOR SELECT pi_cid as MSG FROM dual;

EXCEPTION
WHEN OTHERS THEN
  ROLLBACK;
   common.sp_InsertErrorLog('sp_Name', SQLCODE, SQLERRM); -- nothing gets logged
 END;

我的VB.NET代码:

代码语言:javascript
复制
Public Function SetValues(ByVal gid As String, ByVal CId As String) As Boolean

     Dim connection As OracleConnection = New OracleConnection(GetConnectionString())
     Dim command As OracleCommand = connection.CreateCommand()
     Dim parameters As OracleParameter = New OracleParameter

     Dim dataAdapter As New OracleDataAdapter(command)
     Dim rtnMsg As String
     Dim ds As New DataSet

            Try
                connection.Open()
                command.Parameters.Add("parameters", OracleDbType.RefCursor, DBNull.Value, ParameterDirection.Output)
                command.Parameters.Add("pi_gId", OracleDbType.Varchar2, gid, ParameterDirection.Input)
                command.Parameters.Add("pi_cid", OracleDbType.Varchar2, CId, ParameterDirection.Input)
                

                command.CommandText = "sp_UpdateLSR"

                dataAdapter.Fill(ds)
                If ds.Tables(0).Rows.Count > 0 Then
                    rtnMsg = ds.Tables(0).Rows(0)(0).ToString()
                End If
                SetLIMSValues = rtnMsg.ToLower() = CharId.ToLower()
            Catch ex As Exception
                Throw New Exception("error", ex)
            Finally
                command.Dispose()
                parameters.Dispose()
                If Data.ConnectionState.Open Then
                    connection.Close()    'close the connection
                End If
            End Try

        End Function

有什么想法吗?

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-01-12 04:10:30

在对数据库执行存储过程时,需要告诉命令对象,缺省值为CommandText

添加以下行:

代码语言:javascript
复制
command.CommandType = CommandType.StoredProcedure

在设置CommandText之前或之后-只需一个方便记忆和接近的地方。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65673276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档