Здравствуйте, Hottabych1, Вы писали:
H>H>using System;
H>using System.IO;
H>using System.Data.SqlClient;
H>namespace Test
H>{
H> class Program
H> {
H> public string Main(string strName)
H> {
H> SqlConnection cn = new SqlConnection("Data Source=.; Initial Catalog=SomeDb; User ID=sa; PWD=.;");
H> SqlCommand cmd = new SqlCommand("select somecolumn from sometable where somefield = "
H> + strName);
H> SqlDataReader datareader = cmd.ExecuteReader();
H> datareader.Read();
H> return datareader.GetValue(0).ToString();
H> }
H> }
H>}
H>
Ну разве что для развлечения
1. Формально это, конечно, не ощибка, но функция Main, определенная таким вот образом, не является валидной точкой входа приложения. Да, в условиях задачи нигде не сказано, что она таковой подразумевается, но здравый смысл это подсказывает.
2. Захардкоденная строка соединения с БД — дурной тон.
3. SqlConnection надо открывать и закрывать. Для корректного закрытия просто напрашивается использование using.
4. Текст SqlCommand получается конкатенацией строки и нигде не проверяется. Тем самым открывается путь для SQL injection.
5. Созданный экземпляр SqlCommand никак не привязывается к экземпляру SqlConnection.

Метод ExecuteReader бросит ошибку.
6. SqlCommand реализует IDisposable, поэтому желательно использовать using.
7. SqlDataReader реализует IDisposable, поэтому желательно использовать using (или закрывать ридер явно).
8. Нет проверки на то, что SqlDataReader вернул хоть один рекорд. Поэтому метод dataReader.GetValue(0) вполне может кинуть ошибку.
9. Нет вообще никакой обработки ошибок.