Access sql语句运行时显示无效的sql语句是啥原因

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Access sql语句运行时显示无效的sql语句是啥原因相关的知识,希望对你有一定的参考价值。

alter table语句提示无效

1、首先我们打开电脑里的Access2010软件,软件会默认开启一个表名为【表1】的空白表单。

2、将空白表单表名修改为【测试表】,添加字段和几行测试数据。

3、默认软件工具栏是【开始】工具栏,我们点击【创建】进入创建工具栏,在工具栏中点击【查询设计】。

4、弹出【显示表】窗口,点击【关闭】将该窗口关掉。

5、这时软件会进入【设计】工具栏,我们点击工具栏左侧的【SQL视图】。

6、【SQL视图】默认选择的是【设计视图】,我们在下拉菜单中选择【SQL视图】。

7、在工具栏下方会自动打开一个查询窗口,在这里就可以输入查询用的SQL语句了。

8、我们输入一行标准的SQL查询语句,查询在【测试表】中性别为‘女’的数据,点击【运行】。

9、SQL语句执行完成后,查询窗口会自动转换为表视图,以表格方式显示查询到的数据。

参考技术A Alter table职工 alter column 职工号 text(5)

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

【中文标题】Oracle.DataAccess.Client.OracleException: ORA-00900: 无效的 SQL 语句【英文标题】:Oracle.DataAccess.Client.OracleException: ORA-00900: invalid SQL statement 【发布时间】:2021-01-11 19:24:35 【问题描述】:

我使用以下代码创建了一个 Oracle SP。如果我从 SQL 开发人员那里执行它,那么它运行时不会出现任何错误/问题。但是,当我尝试从 .NET 代码调用同一个 SP 时,会引发异常并显示消息“Oracle.DataAccess.Client.OracleException: ORA-00900: invalid SQL statement”。

Oracle SP 代码:

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 代码:

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

有什么想法吗?

谢谢。

【问题讨论】:

为什么要为单个静态值返回 RefCursor?为什么返回输入值pi_cid?异常处理程序也是无用的。如果 UPDATE 失败,那么无论如何它都会回滚。如果错误出现在其他地方,那么回滚是没有用的,因为你已经发出了 COMMIT。 对于单个返回值,我更喜欢使用FUNCTION 而不是过程。 【参考方案1】:

当你对数据库执行存储过程时,你需要告诉命令对象,默认是CommandText

添加行:

command.CommandType = CommandType.StoredProcedure

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

【讨论】:

谢谢JayV。 [不知道我是怎么错过的,我真的不知道该说什么:)]

以上是关于Access sql语句运行时显示无效的sql语句是啥原因的主要内容,如果未能解决你的问题,请参考以下文章

sqlsever中对用户授权时显示无法授权

Oracle数据库执行查询语句报错:无效数字。

如何查看 jOOQ 在编译时执行的 SQL 语句?

access2013 VBA中怎样运行sql语句

我的access数据库里面sql语句在服务器上不能正常运行?

使用准备好的语句存储空值时 SQL 数据类型无效 [重复]