ORA-00936: отсутствует выражение при заполнении набора данных в OracleDataAdapter - PullRequest
1 голос
/ 06 мая 2019

Я использую этот вид кода для MySQL, SQL Server и Oracle.Для MySQL и SQL Server это работает просто отлично.Когда речь идет об Oracle, при выполнении adapter.Fill(dataset); выдается исключение "ORA-00936".Кто-нибудь знает, почему это происходит?

Сообщение об ошибке:

ORA-00936: отсутствует выражение при заполнении набора данных в OracleDataAdapter

MySQL-запрос:

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();
            }
        }
    }
}

1 Ответ

1 голос
/ 06 мая 2019

Согласно OracleDataAdapter, вы можете использовать следующий код:

В вашем SqlQuery вместо @ заменить на :

так что SqlQuery будет

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

, и в параметре

 command.Parameters.Add("@Version", version.ToString());
не требуется @
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...