О горячих сочетаниях клавиш редактора 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(логическое выражение, "A conditional Hello!");
Шифрование паролей
То как вы храните пароли в базе данных очень важно. Если вы храните их в обычном текстовом виде, то злоумышленник, получив доступ к базе, сможет сделать все, что захочет, получив пароли администраторов системы. Именно поэтому пароли следует хешировать.
В пространстве имен System.Security.Cryptography namespace есть класс HashAlgorithm, являющийся базовым классом для всех классов алгоритмов хеширования, таких как SHA1, MD5 и др.
Метод этого класса ComputeHash принимает на вход массив типа byte с текстом, который необходимо хешировать и возвращает массив типа byte хешированного текста.
HashAlgorithm hashAl = HashAlgorithm.Create("MD5");
byte[] myPasswordInBytes = Encoding.Unicode.GetBytes(txtPassword.Text);
byte[] myHashedPassword = hashAl.ComputeHash(myPasswordInBytes);
Теперь вы можете хранить в базе хешированный пароль. А когда пользователь будет входить в свой аккаунт, введенный им пароль необходимо хешировать тем же алгоритмом и сравнить полученный хеш с хешем, хранящемся в базе данных, например так:
private bool CompareHashPasswords(byte[] hashedNewPass, byte[] hashedPass)
{
if (hashedNewPass == null || hashedPass == null || hashedNewPass.Length != hashedPass.Length)
return false;
for (int i = 0; i <>
{
if (hashedPass[i] != hashedNewPass[i])
return false;
}
return true;
}
Добавление контрола в меню или на панель инструментов
Для этого нужно передать ссылку на контрол в конструктор класс 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;
}
Как сделать blogspot блог dofollow блогом
Этот атрибут можно убрать, и тогда PR блога будет передаваться через ссылки на страницы комментаторов, что в принципе может привлечь комментаторов на блог. О том как это сделать на blogspot блоге я и расскажу в этой статье.
Зайдите в админку блога, выберете Макет-> Изменить HTML

Откройте файл шаблона в любом редакторе и найдите строку
a expr:rel="nofollow" href='data:comment.authorUrl' ref='nofollow'
сотрите ref='nofollow', сохраните шаблон.
С помощью кнопки «Обзор» в админке выберете путь к измененному шаблону, нажмите кнопку «Загрузить», нажмите кнопку «Сохранить шаблон».
Все. Ваш блог теперь dofollow. Можно обрадовать этим фактом комментаторов.
Использование файла конфигурации проекта
При подключении к базе данных 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 SqlConnection(Properties.Settings.Default.MyConnectionString);
И при изменении строки подключения ее нужно будет поменять только в файле app.config.
Этот файл так же можно редактировать не вручную, а щелкнув в Solution Explorer по значку проекта правой кнопкой мыши, выбрать в контекстном меню пункт Properties, далее вкладку Settings, на которой уже в удобной форме можно добавлять и редактировать переменные файла app.config.




