Сообщения

Сообщения за 2008

О горячих сочетаниях клавиш редактора Visual Studio

1. Для того, чтобы выделить текст в редакторе VS колонкой, удерживайте клавишу Alt. 2. Редактор Visual Studio предоставляет возможность сохранять в буфере обмена по несколько фрагментов. Для того, чтобы выбрать, какой фрагмент из буфера вставлять нажмите Ctrl + Shift+V. 3. Нажатие сочетания Ctrl+K+C позволяет закомментировать выделенный участок текста, а Ctrl+K+U – снять комментарии. 4. Для показа подсказчика кода (IntelliSense) нажмите Ctrl+J. 5. Для быстрого перехода от открытой скобки (знака /*, начала региона #region) к ее паре нажмите Ctrl + ].

Как получить абсолютный путь к web странице

В ASP.NET получить абсолютный путь к странице достаточно легко. Для этого можно использовать метод VirtualPathUtility.ToAbsolute. string absolutePath = VirtualPathUtility.ToAbsolute("~/test/MyWebForm.aspx"); Uri newUri = new Uri(Request.Url, absolutePath);

Об операторе ?? (C#)

Оператор ?? возвращает значение выражения, стоящего слева от него, если оно не является null, иначе возвращает значение выражения, стоящего справа. Например: //err = param, если param не null string err = param ?? "No errors";

Оптимизация SQL запроса update

Предположим, в программе стоит задача обновить запись в базе данных, если такая запись имеется и вставить запись, если такой записи еще нет. Конечно, можно сначала выполнить SQL запрос на проверку существования записи, потом выполнить запросы Insert или Update в зависимости от его результата. Но все эти операции можно совместить в одном SQL запросе следующим образом: IF EXISTS(SELECT * FROM имя_таблицы WHERE Id = @id) BEGIN UPDATE имя_таблицы SET имя_поля1 = @newValue1, имя_поля2 = @newValue2, … WHERE Id = @id END ELSE BEGIN INSERT INTO Table1 (Id, имя_поля1, имя_поля2,…) VALUES (@id, @newValue1, @newValue2, …) END

Как проиграть в программе стандартные Windows звуки

Иногда, хочется оформить приложение звуками. Если Вы используете .NET 2.0 и выше, то можете воспользоваться для этого пространством имен System.Media и его классом SystemSounds. Чтобы воспроизвести, например, классический звук «сообщение», вы можете использовать следующий код: System.Media.SystemSounds.Beep.Play(); Для воспроизведения звука «вопрос»: System.Media.SystemSounds.Question.Play();

Процедура вычисления MD5 кода строки

Для хранения паролей в базе данных зачастую используют MD5 шифрование. Вот процедура, позволяющая получить MD5 код строки. public string CalculateMD5Hash(string input) { // step 1, calculate MD5 hash from input MD5 md5 = System.Security.Cryptography.MD5.Create(); byte[] inputBytes = System.Text.Encoding.ASCII.GetBytes(input); byte[] hash = md5.ComputeHash(inputBytes); // step 2, convert byte array to hex string StringBuilder sb = new StringBuilder(); for (int i = 0; i < hash.Length; i++) { sb.Append(hash[i].ToString("X2")); //для получения хеша в верхнем регистре // sb.Append(hash[i].ToString("x2")); //для получения хеша в нижнем регистре } return sb.ToString(); } Пример вызова: string hash = CalculateMD5Hash("abcdefghijklmnopqrstuvwxyz"); …выходная строка будет выглядеть так: C3FCD3D76192E4007DFB496CCA67E13B

Выводить отладочные сообщения просто!

Visual Studio предоставляет разработчику множество средств отладки, позволяет оттрассировать код строка за строкой. Однако в некоторых случаях, когда вам требуется, к примеру, узнать значение некоторой переменной в определенной области кода, более рациональным решением будет использование отладочных сообщений. Эти сообщения можно выводить при помощи методов Write* класса System.Diagnostics.Debug. Красота класса Debug состоит в том, что когда вы станете компилировать ваш проект с конфигурацией Release, строки кода с классом Debug не будут компилироваться. Это означает, что вам не придется вычищать код программы от отладочных сообщений перед финальной компоновкой. Для использования класса Debug необходимо добавить в раздел объявлений: using System.Diagnostics; После этого вы можете использовать метод Debug .Write например так: Debug.Write("Hello, Debugger!"); Помимо метода Write существуют методы WriteIf, WriteLine и WriteLineIf, например: Debug.WriteLineIf(логическое выражение

Шифрование паролей

Наверняка вам приходилось когда-либо восстанавливать забытый пароль от вебсайта, и вы замечали, что с вебсайта вам зачастую присылают ссылку, по которой можно задать новый пароль вместо того, чтобы просто выслать вам старый. Причина этого в том, что на этих вебсайтах ваш пароль кодируется односторонним хешированием. То как вы храните пароли в базе данных очень важно. Если вы храните их в обычном текстовом виде, то злоумышленник, получив доступ к базе, сможет сделать все, что захочет, получив пароли администраторов системы. Именно поэтому пароли следует хешировать. В пространстве имен System.Security.Cryptography namespace есть класс HashAlgorithm, являющийся базовым классом для всех классов алгоритмов хеширования, таких как SHA1, MD5 и др. Метод этого класса ComputeHash принимает на вход массив типа byte с текстом, который необходимо хешировать и возвращает массив типа byte хешированного текста. HashAlgorithm hashAl = HashAlgorithm.Create("MD5"); byte[] myPasswordInBytes = En

Добавление контрола в меню или на панель инструментов

При помощи класса ToolStripControlHost вы можете добавить контрол в меню, контекстное меню или на панель инструментов. Для этого нужно передать ссылку на контрол в конструктор класс ToolStripControlHost, а затем добавить экземпляр класса ToolStripControlHost в меню как MenuItem. Пример: private void Form1_Load(object sender, EventArgs e) { MonthCalendar picker = new MonthCalendar(); picker.DateSelected += new DateRangeEventHandler(picker_DateSelected); ToolStripControlHost host = new ToolStripControlHost(picker); fileToolStripMenuItem.DropDownItems.Insert(2,host); } void picker_DateSelected(object sender, DateRangeEventArgs e) { MonthCalendar picker = ((MonthCalendar)sender); this.Text = picker.SelectionStart.ToString("yyyy/MMM/dd"); }

Как заполнить ComboBox значениями из базы данных

private SqlConnection cn = new SqlConnection(Properties.Settings.Default.oborudConnectionString); private DataSet myDS = new DataSet(); dAdapt = new SqlDataAdapter("select * from имя_таблицы", cn); dAdapt.Fill(myDS, "имя_таблицы"); comboBox1.Items.Clear(); int i = 0; for (i = 0; i < myDS.Tables["имя_таблицы "].Rows.Count; i++) { comboBox1.Items.Add(myDS.Tables["имя_таблицы"].Rows[i][1].ToString()); }

Как раскрасить строки dataGridView в разные цвета

Для того, чтобы раскрасить строки dataGridView в разные цвета в зависимости от значения какого-либо поля можно использовать следующий код: private void dataGridView1_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) { if (e.RowIndex > -1 && e.RowIndex < dataGridView1.RowCount - 1) { if (dataGridView1.Rows[e.RowIndex].Cells[10].Value.ToString() == "1") ((DataGridView)sender).Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightBlue; if (dataGridView1.Rows[e.RowIndex].Cells[10].Value.ToString() == "2") ((DataGridView)sender).Rows[e.RowIndex].DefaultCellStyle.BackColor = Color.LightCyan; } }

Процедура выполнения SQL запроса на C#

При программировании на языке C# в среде Visual Studio бывает достаточно утомительно каждый раз писать по 5 строк, для того, чтобы выполнить обычный SQL запрос  insert, delete или update. Поэтому можно написать для этотй цели такую процедуру: public int no_result_query(string query, SqlConnection connection) //Процедура выполнения SQL запроса, не возвращающего результата //такого, как insert, delete, update //возвращает кол-во затронутых рядов, -1 в случае неудачи { SqlCommand myCommand = new SqlCommand(query, connection); myCommand.Connection.Open(); int q_result = myCommand.ExecuteNonQuery(); myCommand.Connection.Close(); myCommand.Dispose(); return q_result; }

Использование файла конфигурации проекта

При подключении к базе данных MsSQL из среды Visual Studio зачастую приходится использовать следующую конструкцию: private SqlConnection cn = new SqlConnection('Data Source=...;Initial Catalog=...;Persist Security Info=True;User ID=...;Password=...'); во многих местах проекта. Для того, чтобы при изменении строки подключения изменять ее только в одном месте, а не во всех модулях, целесообразно использовать файл конфигурации проекта app.config, в котором можно описать переменную строки подключения в следующем формате xml: add name="Название проекта.Properties.Settings.oborudConnectionString" connectionString="Data Source=...;Initial Catalog=...;Persist Security Info=True;User ID=...;Password=..." providerName="System.Data.SqlClient" Тогда в любом модуле программы для получения строки подключения можно использовать такую конструкцию: Properties.Settings.Default.MyConnectionString Например: private SqlConnection cn = new SqlConne