2013-03-14 4 views
1

Мы используем ОЧЕНЬ старую версию Informix (SE). Я пытаюсь создать структуру типа ORM в C# для обработки процедур CRUD. Я с трудом пытаюсь придумать способ работы с таблицами, содержащими поля SERIAL.Последовательные поля в Informix для рамки ORM

В принципе, я хотел бы как-то создать уникальное значение, которое я могу быть уверенным, будет по-прежнему уникальным, когда я вставляю запись или, по крайней мере, получаю значение записи, которую я только что вставил. Это должно работать, если многие пользователи одновременно используют таблицу (так что общая схема базы данных).

Я знаю, что более новые версии имеют объекты «sequence», которые можно настроить, но SE этого не делает.

+0

Драйвер ODBC Informix обеспечивает способ доступа к вставленному серийному номеру; ESQL/C тоже (в структуре sqlca). Можете ли вы получить от C#? Какую версию Informix SE вы используете? На какой платформе вы его используете? –

+0

Я попробовал это с веб-сайта IBM, но, судя по всему, моя версия SE не поддерживает sqcla. http://publib.boulder.ibm.com/infocenter/idshelp/v10/index.jsp?topic=/com.ibm.sqls.doc/sqls1023.htm – Belmiris

+0

На самом деле, я поговорил с нашим парнем, и он поддерживается только в unix 4gl/4ge. Я пытаюсь использовать csharp в windows. – Belmiris

ответ

2

FYI: Драйвер Informix ODBC и драйвер .NET официально не поддерживают SE; он все еще может работать. Мои знания о SE также ограничены; информация, которую я перечисляю ниже, может иметь большее значение для IDS, чем SE.

Драйвер, который вы пытаетесь, является Поставщик данных .NET Framework для ODBC; он не работает с типом данных Informix. Informix native .NET Provider поддерживает серию в IDS, но этот драйвер никогда не тестировался против SE. Если вы готовы пойти на риск, тогда шансы на успех могут быть выше с этим.

Я не думаю, что вам нужно использовать любой сложный алгоритм, чтобы сделать последовательное значение уникальным на сервере. Следующий пример объяснит это лучше.

CREATE TABLE tab (c1 SERIAL); 
    INSERT INTO tab VALUES (0); 
    INSERT INTO tab VALUES (4); 
    INSERT INTO tab VALUES (0); 
    INSERT INTO tab VALUES (3); 
    INSERT INTO tab VALUES (3); 
    INSERT INTO tab VALUES (0); 
    SELECT * FROM tab; 

    1 
    4 
    5 
    3 
    3 
    6 


DROP TABLE tab; 
CREATE TABLE tab (c1 INT, c2 SERIAL PRIMARY KEY); 
INSERT INTO tab VALUES (11, 0); 
INSERT INTO tab VALUES (12, 0); 
INSERT INTO tab VALUES (13, 0); 
INSERT INTO tab VALUES (14, 0); 
INSERT INTO tab VALUES (15, 0); 
SELECT * FROM TAB; 

c1   c2 

11   1 
12   2 
13   3 
14   4 
15   5 

Если вы пытаетесь для значения последовательного типа, вырабатываемой на стороне клиента, такие как записи добавляются в DataTable и т.д., то следующие свойства на DataColumn могут быть полезны: AutoIncrement, AutoIncrementStep, AutoIncrementSeed.

+0

Большое спасибо за информацию. К сожалению, этот магазин настаивает на использовании большого количества устаревшего кода, включая VB6 (это то, что я пытаюсь заменить в свободное время). VB6 не может использовать 64-битные драйверы. Они (наконец) планируют модернизировать БД для IDS, но они не будут вынуждать существующих клиентов обновляться. – Belmiris

+0

Я думаю, что я просто откажусь от любых вложений для таблиц, у которых есть SERIAL-поля в своих индексах. Большое спасибо за вашу помощь. – Belmiris

Смежные вопросы