c# - ORA-00936 : missing expression when filling dataset to OracleDataAdapter

标签 c# database oracle

我正在为 MySQL、SQL Server 和 Oracle 使用这种代码。对于 MySQL 和 SQL Server,它工作得很好。对于 Oracle,在执行 adapter.Fill(dataset); 时抛出“ORA-00936”异常。有人知道为什么会这样吗?

错误信息是

ORA-00936: missing expression when filling dataset to OracleDataAdapter

我的 SQL 查询是:

sqlQuery: "SELECT * FROM \"DWSYS\" WHERE NOT FCVERSION=@Version"

C#代码是:

public class OutputOracleQuery : IWriteSQLQuery
{
    private static readonly ILogger logger = LoggerFactory.Create(typeof(OutputOracleQuery));
    HelperEnvironmentVariable GetEnvironmentVariable = new HelperEnvironmentVariable();

    public DataSet GetData(string DBUser, string DBUserPassword, string sqlQuery, string databaseName, Version version)
    {
        using (OracleConnection connection = new OracleConnection("Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=" + GetEnvironmentVariable.MachineName + ")(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))); User Id=" + DBUser + ";Password=" + DBUserPassword + ";"))
        {
            try
            {
                using (var command = new OracleCommand(sqlQuery, connection))
                {
                    connection.Open();
                    command.Parameters.Add("@Version", version.ToString());

                    OracleDataAdapter adapter = new OracleDataAdapter(command);                     
                    DataSet dataset = new DataSet();
                    adapter.Fill(dataset);

                    return dataset;
                }
            }
            catch (OracleException ex)
            {
                logger.Debug("Demanded Database action for the database " + "\"" + databaseName + "\"" + " could not be executed", ex);
                throw;
            }
            finally
            {
                connection.Close();
            }
        }
    }
}

最佳答案

根据 OracleDataAdapter ,您可以使用以下代码。

在你的 SqlQuery 而不是 @ 中,替换为 :

所以 SqlQuery 将是

SELECT * FROM \"DWSYS\" WHERE NOT FCVERSION= :Version

并且参数中不需要@

 command.Parameters.Add("@Version", version.ToString());

关于c# - ORA-00936 : missing expression when filling dataset to OracleDataAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56000761/

相关文章:

c# - 访问路径 'C:\Users\xxx\Desktop' 被拒绝

c# - 如何在 wpf 数据网格中绑定(bind)组合框?

c# - 使用列表作为 DataGridView 的数据源

Java 数据库插入失败

使用 Inner Join 的 MySQL 查询返回存储过程中的所有记录

sql - oracle(通过 sql/plus)如何确定用于评估 sql 脚本的字符集

c# - visual studio 在控制台应用程序而不是 Web 项目中打开 Web 浏览器 + 调试器

mysql - 使用mysql删除命令时,锁总数超过锁表大小

sql - Oracle 将多列合并为一列

sql - 从 Oracle SQL 过程中的表执行 SQL 语句