Моя машина для разработки работает под управлением Windows 7 Enterprise, 64-разрядная версия. Я использую кандидата на выпуск Visual Studio 2010. Я подключаюсь к серверу Oracle 11g Enterprise версии 11.1.0.7.0. Мне было трудно найти клиентское программное обеспечение Oracle, которое предназначено для 64-битных систем Windows и в итоге оказалось здесь , чтобы загрузить то, что, как я полагаю, является подходящим клиентским программным обеспечением для подключения. Я добавил ссылку на «Oracle.DataAccess» версии 2.111.6.0 (Runtime Version v2.0.50727). Я нацеливаюсь на .NET CLR версии 4.0, поскольку все свойства моего VS Solution являются настройками по умолчанию, и это 2010 RC. Затем я смог написать консольное приложение на C #, которое установило связность, выполнило оператор SELECT и правильно вернуло данные, когда рассматриваемая таблица НЕ содержит пространственный столбец. Моя проблема заключается в том, что это больше не работает, когда в таблице, которую я запрашиваю, есть столбец типа SDO_GEOMETRY.
Ниже приведено простое консольное приложение, которое я пытаюсь запустить, которое воспроизводит проблему. Когда код попадает в строку с командой «ExecuteReader», возникает исключение и появляется сообщение «Неподдерживаемый тип данных столбца».
using System;
using System.Data;
using Oracle.DataAccess.Client;
namespace ConsoleTestOracle
{
class Program
{
static void Main(string[] args)
{
string oradb = string.Format("Data Source={0};User Id={1};Password={2};",
"hostname/servicename", "login", "password");
try
{
using (OracleConnection conn = new OracleConnection(oradb))
{
conn.Open();
OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from SDO_8307_2D_POINTS";
cmd.CommandType = CommandType.Text;
OracleDataReader dr = cmd.ExecuteReader();
}
}
catch (Exception e)
{
string error = e.Message;
}
}
}
}
Тот факт, что этот код работает при использовании таблицы, которая не содержит пространственный столбец типа SDO_GEOMETRY, заставляет меня думать, что мой компьютер с Windows 7 настроен правильно, поэтому я удивлен, что получаю это исключение, когда таблица содержит разные типы колонн. Я не знаю, есть ли какая-либо конфигурация на моей машине или машине Oracle, которую необходимо выполнить, или если установленное мной клиентское программное обеспечение Oracle неверно или устарело и требует обновления.
Вот SQL, который я использовал для создания таблицы, заполнения ее несколькими строками, содержащими точки в пространственном столбце и т. Д., Если вы хотите попытаться воспроизвести это точно.
Команды создания SQL:
create table SDO_8307_2D_Points (ObjectID number(38) not null unique, TestID number, shape SDO_GEOMETRY);
Insert into SDO_8307_2D_Points values (1, 1, SDO_GEOMETRY(2001, 8307, null, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(10.0, 10.0)));
Insert into SDO_8307_2D_Points values (2, 2, SDO_GEOMETRY(2001, 8307, null, SDO_ELEM_INFO_ARRAY(1, 1, 1), SDO_ORDINATE_ARRAY(10.0, 20.0)));
insert into user_sdo_geom_metadata values ('SDO_8307_2D_Points', 'SHAPE', SDO_DIM_ARRAY(SDO_DIM_ELEMENT('Lat', -180, 180, 0.05), SDO_DIM_ELEMENT('Long', -90, 90, 0.05)), 8307);
create index SDO_8307_2D_Point_indx on SDO_8307_2D_Points(shape) indextype is mdsys.spatial_index PARAMETERS ('sdo_indx_dims=2' );
Любой совет или идеи будут с благодарностью. Спасибо.