Tuesday, February 17, 2009

Is this piece of code OK?

At one of the job interviews I was asked this question for the following piece of code (see below). Few days ago I was putting my papers in order and found the sheet with the question. This code will compile and run, furthermore it will work as desired. But what’s wrong with it, however?

class BuildTable
{
public string BuildEmployeeTable(string lnamePrefix)
{
string cmd = "SELECT fname, lname, phone FROM Employee WHERE lname LIKE'" + lnamePrefix + "'";
SqlConnection sqlConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand sqlCommand = new SqlCommand(cmd, sqlConnection);
SqlDataReader sqlReader = sqlCommand.ExecuteReader();
string empTable = "<TABLE BORDER=3><TR>";
empTable = empTable + "<TH>Name</TH><TH>Phone</TH>";
while (sqlReader.Read())
{
empTable = empTable + string.Format("<TR><TD>{0} {1}</TD><TD>{2}</TD></TR>",
sqlReader["fName"], sqlReader["lName"], sqlReader["phone"]);
}
empTable = empTable + "</TABLE>";
sqlReader.Close();
sqlConnection.Close();
return empTable;
}
}

4 comments:

dr-japh said...

Оооо... ууу... ты похоже не тот язык выбрал =(. Понимаю

Bashir Magomedov said...

Ты про английский? :) А если серьезно, то код этот хоть и работает, но довольно кривой, причем кривой во многих отношениях, в частности в очень тонких моментах, о которых многие не читающие серьезных книжек могут и не знать. Основная цель теста именно выявить знания человека, посмотрев насколько хорошо он перепищет этот код :)

dr-japh said...

Да тут батенька SQL инжекция... Ха, умные книги. Тут любой школьник поймет.

Bashir Magomedov said...

Ну инжекция, ну и что? Полезная инжекция, так и задумано. Да не кузяво, можно было сделать хранимыми процедурами, но этот подход тоже имеет право на жизнь... или ты знаешь иной способ извлечения программой данных из БД? :) Не туда смотришь :)