Как создать псевдоним столбца в запросе Unidata с провайдером U2 - PullRequest
0 голосов
/ 28 сентября 2018

В SQL Server я могу создать псевдоним столбца следующим образом:

select id as NewID from sometable

Как мне это сделать в провайдере U2?

Я пробовал:

select id NewID    --returns Column0
select id as NewID --returns Column0
select id "NewID"  --returns Column0
select id 'NewID'  --returns Column0

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

Похоже, Unidata по-разному обрабатывает подключения ODBC и U2.Вот репозиторий:

using System;
using System.Data.Odbc;
using U2.Data.Client;

namespace Demo
{
    class Program
    {
        static void Main(string[] args)
        {
            var csU2 = "Database=XXX;User ID=XXX;Password=XXX;Server=XXX;ServerType=UNIDATA;RpcServiceType=udserver;FirstNormalForm=True";
            var csOdbc = "DSN=XXX";

            var sql = "select ID, ID as NewID from SYS_INSTALL_HISTORY_NF where 1=0";

            Console.WriteLine("U2Command:");

            using (var cnn = new U2Connection(csU2))
            using (var cmd = cnn.CreateCommand())
            {
                cmd.CommandText = sql;
                cnn.Open();
                var reader = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.WriteLine(reader.GetName(i));
                }
            }

            Console.WriteLine();
            Console.WriteLine("OdbcCommand:");

            using (var cnn = new OdbcConnection(csOdbc))
            using (var cmd = cnn.CreateCommand())
            {
                cmd.CommandText = sql;
                cnn.Open();
                var reader = cmd.ExecuteReader();

                for (int i = 0; i < reader.FieldCount; i++)
                {
                    Console.WriteLine(reader.GetName(i));
                }
            }
        }
    }
}

Результат:

U2Command:
ID
Столбец1

OdbcCommand:
ID
NewID

версия драйвера u2 odbc: 7.140.01.8004 версия поставщика u2 .net: 2.2.0.0

Ответы [ 2 ]

0 голосов
/ 21 июня 2019

Вы можете выполнить то, что хотите, используя команду COL.HDG

некоторые примеры:

SELECT ID COL.HDG "NewID" FROM SYS_INSTALL_HISTORY_NF WHERE 1=0
SELECT ID COL.HDG 'NewID' FROM SYS_INSTALL_HISTORY_NF WHERE 1=0
0 голосов
/ 01 октября 2018

Я думаю, у вас есть какая-то ошибка в провайдере .net.Я не смог воспроизвести его, используя ваш код (с немного поддельным запросом), но у меня есть серверная часть UniVerse, и хотя они очень похожи, они, безусловно, являются отличиями.

Тем не менее, в соответствии с Rocket * Использование UniDataSQL Синтаксис, который ДОЛЖЕН работать, - это то, что вы, кажется, пытались первыми.

select ID, ID NewID from SYS_INSTALL_HISTORY_NF where 1=0

Мне кажется странным то, что "Column0" происходит, скорее всего, от самого провайдера .net, а не от UniData.Это похоже на то, как запрос определил, сколько столбцов будет, но еще не присвоил им имена.Если бы это было правдой, я бы ожидал, что Запрос просто потерпит неудачу и будет выдано исключение.Вы не делаете никаких других исключений, ловящих на фактическом вызове, не так ли?Вы пробовали это с колонкой без идентификатора?

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

Удачи.

...