Oracle ведет к другой таблице - PullRequest
1 голос
/ 27 апреля 2010

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

Я добавил заменяющий pk-кандидат в RAW (16) к каждой таблице в базе данных и заполнил каждую запись SYS_GUID (). Я сделал то же самое для FK, я добавил столбец замены для каждого FK. Сейчас я нахожусь в процессе связывания FK с их PK, выполняя запросы к родительской таблице, я получаю ключ guid / new для конкретной строки, после чего я хочу вставить замещающий кандидат FK в дочернюю таблицу.

Примерно так:

sqlString = "SELECT PK FROM " + t+ " WHERE " + fkcol+ " = " + childValue;
OracleDataReader guidReader = GetDataReader(sqlString);

while (guidReader.Read())
{
    sqlString = "UPDATE T SET FK = " + guidReader["PK"];
}

Отладка этого sqlString возвращает мне следующее значение:

ОБНОВЛЕНИЕ SIS_T_USER SET FK_C_EMPLOYEE_ID = System.Byte []

Теперь, как мне выйти и сохранить это как хороший гид в моей базе данных оракула?

РЕДАКТИРОВАТЬ как:

OracleCommand command = new OracleCommand(sqlString, this.oracleConnection);
                                command.CommandType = CommandType.Text;
                                OracleParameter op1 = new OracleParameter("guid", OracleDbType.Raw);
                                op1.Value = guidReader["PK"];
                                command.Parameters.Add(op1);
                                try
                                {
                                    command.ExecuteNonQuery();
                                }
                                catch (OracleException oex)
                                {
                                    Console.WriteLine("Unable to update: {0}", oex.Message);
                                }

Ответы [ 2 ]

2 голосов
/ 27 апреля 2010

Почему бы вам просто не сделать все это на Oracle стороне?

MERGE
INTO    sis_t_user s
USING   employee e
ON      (s.integer_fk = e.integer_pk)
WHEN MATCHED THEN
UPDATE
SET     s.guid_fk = e.guid_pk
0 голосов
/ 27 апреля 2010

Попробуйте этот код:

sqlString = "UPDATE T SET FK = '" + (new Guid((byte[])guidReader["PK"])).ToString() + "'";

По сути, вам просто нужно создать guid из байтов, а затем преобразовать его в строку. Существует конструктор Guid, который позволяет: http://msdn.microsoft.com/en-us/library/90ck37x3(v=VS.100).aspx.

...