|
Программирование >> Программирование баз данных
производительность приложения. Все процессы взаимодействия с пользователем будут протекать чрезвычайно медленно. Дела обстоят еще хуже, если на клиентском компьютере вообще не выполняется какая-либо производительная работа и все данные, необходимые для обеспечения функционирования пользовательского интерфейса, поступают только с сервера. Чтобы проще было понять, насколько важной является задача оптимального распределения нагрузки между клиентом и сервером, достаточно напомнить, что в сети обычно эксплуатируется одновременно сразу несколько (а иногда и очень много) экземпляров клиент-серверных приложений. В таком случае значимость любых ошибок при проектировании приложений существенно возрастает. В частности, кроме двух указанных выше недостатков приложений (чрезмерное количество операций обмена данными с сервером и неправильное распределение нагрузки по созданию пользовательского интерфейса между клиентской и серверной частями приложения), часто отмечается еще один существенный недостаток. Дело в том, что некоторые разработчики, либо в целях минимизации количества операций выборки данных, либо просто потому, что предпочитают работать с данными не на языке SQL, а на языке, который является для них более комфортным, загружают на клиентский компьютер с сервера очень крупные совокупности данных (намного превышающие объем действительно требуемых данных), а затем выполняют поиск по условию и другие операции манипулирования этими данными. Подобную организацию работы приложения необходимо прежде всего прокомментировать так, что само по себе стремление прежде всего упростить работу разработчика, а не усовершенствовать приложение, плохо сказывается на конечном результате. В частности, задача разработчика часто упрощается, если основная нагрузка по обработке данных возлагается на клиентскую часть приложения. Но такое решение не всегда оправдано, поскольку приводит к увеличению объема данных, передаваемых по сети. Чтобы правильно выбрать способ распределения нагрузки в приложении, необходимо учесть все факторы. Если в клиентскую часть приложения за один раз перебрасывается огромное количество данных, причем не только тех, что требуются (поскольку предусмотрено проведение фильтрации данных непосредственно на клиентском компьютере), то, безусловно, приходится вьшолнять гораздо меньше операций обмена данными с сервером, но тем самым работа, для выполнения которой СУЪД SQL Server приспособлена лучше всего, передается в другую программу. Язык SQL превосходно справляется с задачами выборки данных по критерию и сортировки, поэтому нагрузку, связанную с выполнением таких операций, лучше всего возложить на серверную часть приложения. Достаточно лишь предусмотреть применение эффективных способов осуществления этих операций. Примеры обеспечения связи в этом разделе приведены некоторые чрезвычайно упрощенные (иначе говоря, упрощенные до предела) примеры установления соединений. Для каждого языка приведено несколько примеров, по одному из двух наиболее важных разновидностей операций (выборка простого набора данных и вьшолнение запроса, не возвращающего наборы данных). Применение средств установления соединений, предусмотренных в языке С# в настоящее время трудно себе представить, 1сак можно обойтись без использования языка С#. Когда я писал свою предыдущую книгу, язык С# фактически находился лишь на этапе внедрения. Это - довольно качественный язык, относительно простой в изучении (и в этом отношении во многом подобный языку VB). Еще одним преимуществом языка С# является то, что в нем реализованы многие принципы, лежащие в основе языка С. Кроме того, в синтаксисе языков С# и С есть много общего (и благодаря этому упрощается переход с одного языка на другой). Возврат набора данных using System; using System.Data.SqlClient; class Program static void MainO Создать некоторые базовые строки, чтобы можно было рассматривать их отдельно от команд, в которых они используются Встроенные средства защиты; они применяются, только если следующая строка не закомментирована string strConnect = Data Source=(local);Initial Catalog=master;Integrated Security=SSPI ; Средства защиты SQL Server; они применяются, только если следующая строка не закомментирована string StrConnect = Data Source=(local);Initial Catalog=master; User Id=sa;Password=MyPass ; string strCommand = SELECT Name, database id as ID FROM sys.databases ; SqlDataReader rsMyRS = null; SqlConnection cnMyConn = new SqlConnection(strConnect); try { Открыть соединение (при этом фактически впервые осуществляется контакт с сервером базы данных) спМуСопп.Open(); Создать объект команды SqlCommand sqlMyCommand = new SqlCommand(strCommand, cnMyConn); Создать результирующий набор rsMyRS = sqlMyCommand.ExecuteReader(); Вывести полученные данные while (rsMyRS.Read О) Вывести данные первого столбца (по порядковому номеру). Можно также ссылаться на столбец по имени Console.WriteLine(rsMyRS[ Name ]); Console.WriteLine(); Console.WriteLine( Press any key to continue... ); Console.ReadKey(); finally { Выполнить завершающие действия if (rsMyRS != null) rsMyRS.CloseO ; if (cnMyConn != null) cnMyConn.Close(); Выполнение команд без возврата набора данных using System; using System.Data.SqlClient; class Program static void MainO Создать некоторые базовые строки, чтобы можно было рассматривать их отдельно от команд, в которых они используются Встроенные средства защиты; они применяются, только если следующая строка не закомментирована string strConnect = Data Source=(local); Initial Catalog=master;Integrated Security=SSPI ; Средства защиты SQL Server; они применяются, только если следующая строка не зaкoшeнтиpoвaнa string StrConnect = Data Source=(local);Initial Catalog=master; User Id=sa;Password=MyPass ; string strCorranand = CREATE TABLE Foo (Columnl INT NOT NULL PRIMARY KEY) ; string strCommand2 = DROP TABLE Foo ; SqlConnection cnMyConn = new SqlConnection(strConnect); try { Открыть соединение (при этом фактически впервые осуществляется контакт с сервером базы данных) cnMyConn.Open(); Создать объект команды SqlCommand sqlMyCommand = new SqlCommand(strCommand, cnMyConn); Выполнить команду sqlMyCommand.ExecuteNonQuery(); Console.WriteLine( Table Created ); Console.WriteLine( Press enter to continue (you can go check to make sure that its there first) ); Console.ReadLine(); Внести изменения в текст команды sqlMyCommand.CommandText = strCommand2; sqlMyCommand.ExecuteNonQuery();
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |