* При перепечатке материалов ссылка на www.SeoLiga.ru обязательна!
Формирование запросов SQL во время выполнения
8 февраля 2009
Иногда конструкция запроса SQL становится известной только в период выполне- ния. Например, запрос может использовать строку для поиска, введенную пользо- вателем, или возврашать столбцы и таблицы, определенные программно в период выполнения. Для решения этих задач соответствующие команды создают, настраи- вают и исполняют в период выполнения.
Первый шаг — формирование строки команды. Напишите сначала заготовку ко- манды; при необходимости заменяйте значения, которые должны быть вставлены в период выполнения, строковыми переменными; для объединения строк используй- те оператор конкатенации. Вот пример: Visual Basic .NET Dim Cmd As String Crnd = "SELECT * FROM Employees WHERE Name = "' & aString & Visual C# string Crnd; Cmd = "SELECT * FROM Employees WHERE Name = ' " + aString + ; Внимание! Любые строковые переменные, передаваемые базе данных при помощи конструкции WHERE, необходимо заключать в одинарные кавычки ('). Если оди- нарные кавычки находятся внутри такой переменной, следует заменить их парой одинарных кавычек ("), в противном случае исполнение запроса закончится неуда- чей, У каждого провайдера данных есть конструктор класса Command, позволяющий устанавливать свойства CommandText и Connection при создании экземпляра Command. После установки этих свойств вам остается лишь открыть соединение и ис- полнить команду. Следующий пример демонстрирует получение методом строки поиска и применение полученной строки для создания и исполнения команды SQL: Visual Basic .NET ' Этот пример предполагает наличие соединения myConnection и 1 оператора, импортирующего пространство имен System.Data.OleDb. Public Sub DeleteRecord(aString As String) Dim Cmd As String Cmd = "DELETE * FROM Employees WHERE Name = '" & aString & Теперь нужно передать переменную Cmd как строку команды и myConnection как объект соединения; Dim myCommand As New 01eDbCornmand(Cmd, myConnection) ' осталось открыть соединение и исполнить команду. myConnection.Ореп() myCommand.ExecuteNonQuery(} ' Не забудьте закрыть соединение! myConnection.Closet) End Sub Visual C# // Этот пример предполагает наличие соединения myConnection и // оператора, импортирующего пространство имен System. Data. OleDb, public void DeleteRecord(string aString) { string Crnd; Crnd = "DELETE * FROM Employees WHERE Name = *" + aString + ..... ; // Указывает Cmd в качестве командной строки, и myConnection // в качестве подключения OleDbComrnand myCommand = new 01eDbCommand(Crnd, myConnection); II осталось открыть соединение и исполнить команду, myConnection. Ореп(); myCommand . ExecuteNonQuery( ) ; /7 Не забудете закрыть соединение! myConnection. CloseO;