Читайте числовые данные из таблицы оракула в C#

Я пытаюсь написать функцию C# для чтения некоторых данных из таблицы оракула

Мои функции:

public static writeConsole(string query, string connectionString, string driver)
{
    //driver = Oracle.ManagedDataAccess.Client
    using (var conn = DbProviderFactories.GetFactory(driver).CreateConnection())
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.Connection.ConnectionString = connectionString;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = query;

            foreach (var item in ReadDouble(cmd))
            {
                Console.WriteLine(item);
            }
        }
    }
}
private static IEnumerable<double> ReadDouble(IDbCommand cmd)
{
    using (var r = cmd.ExecuteReader())
    {
        while (r.Read())
            yield return r.GetDouble(0);
    }
}

Нет проблем ни с подключением, ни с выполнением запроса.

Когда я читаю данные из таблицы оракулов в типе номер (9), он возвращает правильные значения, которые я ожидаю.

Когда я читаю данные из таблицы, где тип это число (9,2), он возвращает пустое значение (как пустая таблица).

Примечание: это только пример кода. Это должно быть написано с использованием интерфейсов IDb

Спасибо за помощь

2 ответа

public static writeConsole(string query, string connectionString, string driver)
{
    //driver = Oracle.ManagedDataAccess.Client
    using (var conn = DbProviderFactories.GetFactory(driver).CreateConnection())
    {
        using (var cmd = conn.CreateCommand())
        {
            cmd.Connection.ConnectionString = connectionString;
            cmd.CommandType = CommandType.Text;
            cmd.CommandText = query;
            var reader = cmd.ExecuteReader();
            while (reader.Read())
            {
                Console.WriteLine(reader[0]+"");
            }
        }
    }
}

Ты можешь попробовать

        OracleConnection conn = new OracleConnection(connectionString);
        OracleCommand cmd = new OracleCommand(query, conn);
        if (conn.State == ConnectionState.Closed)
            conn.Open();
        OracleDataReader reader = cmd.ExecuteReader();
        while (reader.Read())
            {
                Console.WriteLine(reader[0]+"");
            }

Возможно, это проблема с отображением типов. Попробуй это:

http://docs.oracle.com/html/E10927_01/featSafeType.htm

И это:

https://community.oracle.com/message/3582080

Другие вопросы по тегам