вторник, 11 ноября 2008 г.

Новый Blend!

Совсем недавно (в октябре) Microsoft наконец-то выпустила Microsoft Expression Blend 2. Сие чудо облегчает жизнь дизайнерам до невозможного! Перетаскиваем контролы, крутим/вертим, рисуем на них. Устанавливаем браши и градиенты.
Что бросается в глаза - IntelliSens-a нету. =( К сожалению. А может к радости. Объясню почему. 

В Студии например, когда пишешь программу, сразу видишь какие переменные, классы, функции у тебя есть. Здесь же этого не видно. С другой же стороны - лучше будешь XAML знать. (Напоминает ситуацию лет 6 назад. Были люди, которые писали на HTML в блокноте, а некоторые писали в Macromedia(сейчас Adobe) DreamViewer). Так вот. Знание основ - залог успеха в любом деле. В этом я убедился.

Что еще можно сказать по Blend? Приятный дизайн, куча функций, интуитивный интерфейс делают его незаменимым средством для разработки современных приложений. 
После установки, не забудьте сделать Update. Без него нельзя будет разрабатывать Silverlight 2 - приложения.

Интеграция со Студией делает процесс переключения между программами почти незаметным. Два раза щелкаете по *.cs файлу и вы уже в студии. Свернулись, открыли Blend - и дальше... =)
Стоит отметить, что стоимость Blend довольно дорогая для российского рядового разработчика. Но, я вам скажу, оно того стоит. Blend экономит кучу времени и дает тех возможностей, что не дает Студия. 

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

Знакомство с LINQ

Что за зверь? Этим вопросом я задался. Оказалось - это новая фишка от Microsoft. Позволяет делать прикольные штуки. Например выборку из массива, сортировку, упрощает работу с SQL.

Начну с простого примера!
Создаем консольное приложение (.Net Framework 3.5):

using System;
using System.Collections.Generic;
using System.Linq; //Вот наша прелесть ;)
using System.Text;

namespace LinqTests
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("***Fun with LINQ***");
            Console.ReadLine();
        }
    }
}

Теперь допишу функцию QueryOverStrings():
        static void QueryOverStrings()
        {
            string[] currentVideoGames = {"Morrowind", "Bioshock", "Portal", "Hover Ace", "Freelancer",  "Sonic"};
            IEnumerable subset = from game in currentVideoGames where game.Length > 6 orderby game select game;
            foreach (string s in subset)
            {
                Console.WriteLine("Item {0}:", s);
            }
            Console.ReadLine();
        }

Начну по порядку. Мы создали строковый массив currentVideoGames. Записали в него названия нескольких игрушек ;). Далее самое интересное! Используем LINQ. Мы создаем запрос subset, по которому выбираем из нашего массива только те игры, название которых больше 6-ти символов в алфавитном порядке.
Вот и все! Далее используем цикл foreach для отображения нашего запроса на экране, т.е. будут показаны игры, названия которых больше 6-ти символов, как мы и хотели.

Ну и конечно же вызываем эту функцию в main:
QueryOverStrings();
Console.ReadLine();

P.S. Посвящается всем моим знакомым, которые, по не понятным мною причинам, не хотят изучать книги по C# на английском языке.

пятница, 7 ноября 2008 г.

Регистрация и авторизация в ASP.Net

Задумал я тут сделать простенький сайт на ASP.Net
С языком разобраться не составило проблем. А вот с функциональной частью я намучался. Оказалось, что лучше всего использовать для регистрации и авторизации - базу данных MSSQL 2005. А вот как подключиться - я не знал.
Какието SQL Connection, какие-то Query. Что за ConnectionString?

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

Начнем с того, что нам нужно подключиться к БД. Для этого вам нужно установить MS SQL 2005. (Сейчас уже появился MS SQL 2008) Потом вы создаете таблицу, скажем users. В таблице будет 2 поля: логин и пароль. Это просто.
Теперь нужно подключиться к этой БД из нашей программы или сайта.
Для этого мы пишем простой обработчик события. Ниже приведен код простейшей регистрации пользователя на сайте:

protected void RegBut_Click(object sender, EventArgs e)
        {
            System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection("Data Source=LH-38QGJLY27BK5;Initial Catalog=NG;Integrated Security=True");
            sqlConn.Open();

            System.Data.SqlClient.SqlCommand sqlCmd = new System.Data.SqlClient.SqlCommand("INSERT INTO users values('"+LogBox.Text+"','"+PassBox.Text+"')", sqlConn);
            sqlCmd.ExecuteNonQuery();

            sqlConn.Close();

            Server.Transfer("index.aspx",true);
        }

В первой строчке мы соединяемся с БД NG, находящейся на MSSQL-сервере LH-38QGJLY27BK5 (это имя моего компьютера, но если база находится на удаленном хосте, то здесь надо указывать его адрес).
Потом открываем подключение. И создаем запрос на языке SQL. В данном случае - записи логина и пароля в таблицу users. Выполняем этот запрос и закрываем соединение. После чего редирект на index.aspx. Т.е. после регистрации вы будете автоматически перенаправлены на главную страницу.

Авторизация делается схожим образом. Также коннектимся к БД. Только вместо команды INSERT, будет команда SELECT:

protected void EnterBut_Click(object sender, EventArgs e)
        {
            System.Data.SqlClient.SqlConnection sqlConn = new System.Data.SqlClient.SqlConnection("Data Source=LH-38QGJLY27BK5;Initial Catalog=NG;Integrated Security=True");
            sqlConn.Open();
            System.Data.SqlClient.SqlCommand sqlCmd = new System.Data.SqlClient.SqlCommand("SELECT * FROM users", sqlConn);
            System.Data.SqlClient.SqlDataReader sqlRead = sqlCmd.ExecuteReader();

            while (sqlRead.Read())
            {
                if (LogBox.Text == sqlRead[1].ToString() && PasBox.Text == sqlRead[2].ToString())
                {
                    AuthoTable.Visible = false;
                    LoginInfoLabel.Text = " Авторизация прошла успешно";
                    //Здесь поднимаем флажок для привилегий
                }
                else
                {
                    LoginInfoLabel.Text = "Неверный логин и(или) пароль";
                }
            }
            sqlRead.Close();

        }