|
Программирование >> Программирование с использованием ajax
SQLEXPRESS - имя 9K3eMnmpaSQL Server. Может существовать несколько копий SQL Server, установленных на одной машине, и имя экземпляра, заданное во время инсталляции, сообщает SQL Server, какой именно из них нужен. SQLEXPRESS - имя по умолчанию, используемое при инсталляции SQL Express. Если бы уже была установлена другая версия SQL Server, то это имя было бы другим - имени экземпляра даже вообще могло бы не быть (и тогда потребовалось бы использовать в качестве имени (local) либо имя самой машины), или же это было бы другое имя, такое как local\NetSDK, применяемое для инсталляций MSDE в предыдущих версиях .NET Framework. Обратите внимание на символ @, предшествующий строке соединения, который обозначает строковый литерал, что обеспечивает правильную работу обратных слэшей в этой строке; в противном случае понадобились бы двойные слэши (\\) для защиты символа обратного слэша внутри строки С#. Если вы инсталлировали SQL Server, с которым собираетесь работать, то имя этого экземпляра SQL Server должно быть известно. Иначе нужно узнать это имя у самого SQL Server или сетевого администратора. Следующий элемент строки соединения выглядит так: AttachDbFilename=C:\SQL Server 2000 Sample Databases\NORTHWND.MDF; Это тот же файл . MDF, который вы выгрузили в главе 27, содержащий данные примеров Northwind. Если вы поместите этот файл в другой каталог, измените путь, чтобы он соответствовал установке на компьютере. Следующая часть строки соединения специфицирует способ входа в базу данных. Здесь вы используете интегрированную безопасность регистрационной записи Windows, поэтому никакого отдельного имени пользователя и пароля указывать не нужно: Integrated Security=True; Эта конструкция специфицирует стандартную встроенную систему безопасности SQL Server и Windows. В противоположность ей, вместо Integrated Security вы могли бы специфицировать конструкции имени пользователя и пароля, как в случае User=sa; PWD=secret. Применение встроенной системы безопасности регистрационной записи Windows более предпочтительно, чем использование жестко закодированных имени и пароля в строке соединения. Следующая часть строки соединения специфицирует таймаут соединения, т.е. насколько долго программа будет ожидать установки подключения к базе данных SQL Server, прежде чем вернет ошибку. Здесь показано значение в 30 секунд; для реального приложения это вполне нормальное время установки соединения по сети, если сервер достаточно загружен. Connect Timeout=30; И последняя часть строки соединения указывает, используется ли пользовательский экземпляр для вашего соединения: User Instance=true; Пользовательский экземпляр - это локальный экземпляр SQL Server Express, работающий от имени вашей регистрационной записи Windows на локальном компьютере. Пользовательский экземпляр позволяет запускать локальную копию SQL Server для разработки программ, даже если ваша регистрационная запись Windows не имеет административных привилегий в Windows или базе данных. За дополнительной информацией о пользовательских экземплярах обращайтесь по следующим адресам: http: technet.microsoft.com/en-us/library/bb264564.aspx http: technet.microsoft.com/en-us/library/msl43684.aspx Если вы получили исключение, указывающее на недоступность экземпляра, откройте окно запроса и запустите следующую команду базы данных: exec sp configure user instance enabled, 1 Reconfigure Это включит пользовательские экземпляры и автоматически перезапустит SQL Server. Теперь у вас должен быть объект соединения, полностью сконфигурированный для вашей машины и базы данных (соединение еще пока не активно; для активизации его необходимо открыть). После получения объекта соединения можно перейти ко второму шагу - открыть его, что установит соединение с базой данных: thsConnection.Open(); Если метод Open () потерпит неудачу, например, если не будет найден SQL Server, будет сгенерировано исключение SqlException, и вы увидите сообщение, подобное представленному на рис. 28.2. An error has ocojrred wWe estabkhrg e connocbon to the server. When j connecting to SQL Server 2005, the faiure mav be caused by the fact that !□ uxler the drfaJtsetdnos SQL Server does not alow remote connections. Trouble hooUng tips: Get gerw al help for thw ехсе$ (юп j Search for more He<p Onine... Actions: Vww Detail Copy exception detad to the cipboard Puc. 28.2. Исключение SqlException Это конкретное сообщение указывает, что программа не может найти базу данных SQL Server или сам сервер. Проверьте правильность имени сервера в строке соединения, и удостоверьтесь, запущен ли сервер. Третий шаг - создание объекта команды и передачи ему собственно команды SQL для выполнения операции базы данных (такой как извлечение некоторых данных). Код выглядит следующим образом: SqlCommand thisCommand = thisConnection.CreateCommand(); thisCommand.CommandText = SELECT CustomerlD, CompanyName from Customers ; Объект соединения имеет метод по имени CreateCommand () для создания команды, ассоциированной с соединением, поэтому вы используете его для создания объекта команды. Сама команда присваивается свойству CommandText объекта команды. Вы хотите получить список идентификаторов заказчиков и имен компаний из базы данных Northwind, так что это - основа вашей команды запроса SQL: SELECT CustomerlD, CompanyName from Customers SELECT - это команда SQL для получения данных из одной или более таблиц. Распространенная ошибка - опечатка в имени одной или более таблиц, приводящая к другому исключению: thisCommand.CommandText = SELECT CustomerlD, CompanyName from Customer ; Пропущена завершающая буква s в Customers, поэтому возникло исключение, показанное на рис. 28.3. InvdkJ object name Customef. Troublefthoottng tlp : (5et gene.- Ы hei for t i exception. Search for more Help Onlne . AcUonK Copy exception detarf to the ckptioard Puc. 28.3. Искл7(гч£ни£, гласящее о неверном имени объекта Исправим эту ошибку, перестроим приложение и двинемся дальше. Четвертый шаг состоит в чтении и отображении данных. Сначала данные читаются с помощью DataReader, который представляет собой легковесный, быстрый объект для быстрого получения результатов запроса. Он обеспечивает доступ только для чтения, поэтому вы не сможете использовать обновление данных; к этому мы приступим после завершения данного примера. Как было показано в предыдущем разделе, с помощью метода из последнего созданного объекта - объекта команды создается ассоциированный экземпляр объекта, который понадобится дальше, в данном случае - DataReader: SqlDataReader thisReader = thisCommand.ExecuteReader(); ExecuteReader () выполняет команду SQL в базе данных, поэтому любые ошибки базы данных генерируются здесь; он также создает объект-читатель для чтения сгенерированных результатов - здесь он присваивается thisReader. Существует несколько методов для получения результатов от читателя, но следующий процесс общепринят. Метод Read() объекта DataReader читает единственную строку данных, полученную в результате запроса, и возвращает true, пока еще есть строки для чтения, и false - в противном случае. Таким образом, вы устанавливаете цикл while для чтения данных методом Read () и печати результатов по мере получения их в каждой итерации: while (thisReader.Read О) { Console.WriteLine( \t{О}\t{1} , thisReader[ CustomerlD ], thisReader[ CompanyName ]); Пока Read 0 возвращает true. Console .WriteLine ( \t {0} \t {1} , ...) пишет строку, состоящую из двух частей, разделенных символами табуляции (\t). Объект DataReader представляет свойство indexer (см. в главе 11 обсуждение индексаторов). Индексатор indexer перегружен, и позволяет рассматривать столбцы как массив, в котором индексом служит имя столбца: thisReader [ CustomerlD ], thisReader [ CompanyName ], или же по целочисленному индексу: thisReader [0], thisReader [1]. Когда Read О возвращает false, достигнув конца результатов, цикл while завершится. Пятый и последний шаг состоит в закрытии всех открытых вами объектов, к которым относится объект-читатель и объект соединения. Каждый из них имеет метод Close О , который вы вызываете перед выходом из программы: thisReader.Close() ; thisConnection.Close(); Вот и все, что нужно для обращения к одной таблице.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |