Что такое хорошая библиотека .NET для деконструкции SQL-запросов, которая позволяет мне определить, из какой таблицы происходит каждый столбец? - PullRequest
0 голосов
/ 11 февраля 2009

Моя компания должна разрешить внутренним пользователям нашего приложения писать запросы непосредственно к базе данных через наш пользовательский интерфейс. Но когда мы отображаем результаты, наш код должен знать, для какого столбца и таблицы предназначен каждый возвращаемый столбец, чтобы результаты могли отображаться с некоторой цветовой кодировкой и другой логикой для каждого столбца.

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

Пример

select b.FirstName As Name, c.Address From BusinessOwner b
    left join ContactLocation c on b.ID = c.OwnerID

Так что мне понадобится некоторый код, чтобы выяснить, что выходной столбец «Имя» на самом деле был из таблицы BusinessOwner и был столбцом с именем FirstName, а Address взят из таблицы ContactLocation.

Ответы [ 6 ]

2 голосов
/ 11 февраля 2009

Но некоторые поля не происходят из таблицы! Например:

select getdate()

или даже

select "hello world" as ShoutItOut from sysobjects

или у вас может быть несколько источников:

select field1 + field2 as Field1And2 from a inner join b on a.id = b.aid
1 голос
/ 11 февраля 2009

вы можете попробовать что-то вроде этого:

Select b.FirstName As BusinessOwner.Name, c.Address as ContactLoaction.Address
From BusinessOwner as b, ContactLocation as c

и с некоторым анализом первой части имени столбцов, которые возвращаются из запроса, вы определите таблицу, к которой относятся столбцы. как то так:

string tempName = tabel.Columns[0].ColumnName;
string tableName = tempName.Substring(0, tempName.IndexOf('.'));
1 голос
/ 11 февраля 2009

Никогда не использовал этих парней раньше ... но их продукт выглядит так, как будто он может делать то, что вы хотите: http://www.sqlparser.com/index.php

Проверьте http://www.sqlparser.com/docs/How_to_identify_DB_objects_in_your_sql.html, что очень похоже на то, что вам нужно сделать.

Обратите внимание, что ... то, что вы пытаетесь сделать, может быть не очень эффективным. Возможно, больше времени для требований / варианта использования приведет к лучшему решению (кажется, что вашим пользователям нужен быстрый и простой способ применить стандартное форматирование к отчету / отображению ... и я не уверен, что сопоставление по таблице базы данных / Поле действительно ответ на этот вопрос).

0 голосов
/ 11 февраля 2009

Звучит так, как будто вы могли бы сделать это намного проще, чем анализировать sql. Получите DataReader из предоставленного запроса и используйте метод GetSchemaTable (). Вы всегда можете обмануть его, позволив пользователю обернуть столбцы в функции и т. Д. И т. Д., Но у вас будет хороший шанс сделать это ... И он встроен!

0 голосов
/ 11 февраля 2009

EasyQuery от Коржа - это встраиваемый визуальный конструктор запросов, который конечные пользователи могут использовать для создания запросов. У них есть версии для Windows Forms и ASP.NET.

0 голосов
/ 11 февраля 2009

Нет встроенного способа сделать это, вам понадобится некоторый пользовательский код для поддержки отображений, о которых вы заботились.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...