Создание общей страницы «Анализатор запросов», как в Asp.net с SMO - PullRequest
0 голосов
/ 27 марта 2010

Я создаю веб-страницу в ASP.net, как предполагается, работает так же, как Query Analyzer. Он имеет в основном текстовое поле для ввода команды sql и кнопку «Выполнить».

Я использую SMO для выполнения команды в базе данных следующим образом:

//Create object  SMO
Microsoft.SqlServer.Management.Smo.Server server = new Microsoft.SqlServer.Management.Smo.Server(new Microsoft.SqlServer.Management.Common.ServerConnection(oConn));

//To execute the command
server.ConnectionContext.ExecuteNonQuery(tbx_cmd.Text);
//OR
myDataset = server.ConnectionContext.ExecuteWithResults(tbx_cmd.Text);

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

Но, если у меня есть операторы GO, я могу выполнить запрос только с использованием метода ExecuteNonQuery . Если я использую метод ExecuteWithResults , он вызывает ошибки из-за операторов GO.

А если я хочу, чтобы наборы результатов были доступны, я, конечно, могу использовать только метод ExecuteWithResults .

Кто-нибудь знает, как я могу одновременно выполнять одни и те же тексты команд?

Спасибо!

1 Ответ

0 голосов
/ 27 марта 2010

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

Вы МОЖЕТЕ просто создать правило, согласно которому в вашем приложении все команды SQL заканчиваются точкой с запятой, а затем использовать string.split (), чтобы разбить его на несколько строк, и обрабатывать каждую из них как команду. Конечно, это будет зависеть от того, как пользователи будут использовать это правильно.

Говоря о зависимости от пользователей, я просто должен спросить, будет ли это использоваться только вами или другим доверенным лицом? И что-то, что не указывает на ценные данные? Я спрашиваю только потому, что когда я был молодым программистом и не знал ничего лучшего, я создал такой инструмент для критически важной базы данных, и теперь я живу в страхе, что кто-то собирается сделать что-то глупое, как

Delete From MyMissionCriticalTable

а потом я потрачу кто знает как долго это чинить ...

Я не имею представления о вашем уровне опыта, поэтому я не имею в виду оскорбление, когда я призываю вас подумать, ДОЛЖЕН ли вы сделать это, прежде чем беспокоиться о МОЖЕТ, что вы это сделаете.

...