1. C# / Говнокод #1268

    +144.7

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    string insertSQL;
    insertSQL = "INSERT INTO Authors (";
    insertSQL += "au_id, au_fname, au_lname, ";
    insertSQL += "phone, address, city, state, zip, contract) ";
    insertSQL += "VALUES ('";
    insertSQL += txtID.Text + "', '";
    insertSQL += txtFirstName.Text + "', '";
    insertSQL += txtLastName.Text + "', '";
    insertSQL += txtPhone.Text + "', '";
    insertSQL += txtAddress.Text + "', '";
    insertSQL += txtCity.Text + "', '";
    insertSQL += txtState.Text + "', '";
    insertSQL += txtZip.Text + "', '";
    insertSQL += Convert.ToInt16(chkContract.Checked) + "')";

    Из книги "Beginning ASP.NET"

    Запостил: guest, 27 Июня 2009

    Комментарии (20) RSS

    • и что тут такого сильно жуткого?
      Ответить
    • Во-первых, отсутствие какой-либо защиты от SQL-инъекций.
      Во-вторых, надо хотя бы StringBuilder использовать.
      Ответить
    • alex:
      это полный пиздец
      Ответить
    • TEHEK:
      http://xkcd.com/327/
      Ответить
    • Lexey:
      Если оптимизатор не дурак, то он это превратит в один вызов String.Concat. И это будет гораздо эффективнее, чем StringBuilder.
      Ответить
    • да нормальный код. А кто сказал что защита от инъекций нужна в данном конкретном коде?
      Ответить
    • Для книги с названием Beginning ASP.NET это норм.
      Ответить
    • gm:
      string insertSQL = @"INSERT INTO Authors
      au_id, au_fname)
      VALUES (@id, @fname)

      >> А кто сказал что защита от инъекций нужна в данном конкретном коде?
      а никто не сказал. она просто должна быть.
      ещё есть такое понятие как Stored Procedure
      Ответить
    • Димка-никадимка:
      Результат:
      00:00:03.6318518
      00:00:00.0013725
      public class TestString
          {
              Stopwatch time1;
              Stopwatch time2;
              public TestString()
              { 
              }
              public void Test1()
              {
                  time1 = new Stopwatch();
                  string str = "1234";
                  time1.Start();
                  for (int i = 0; i < 2000; i++)
                  {
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                      str += "1234";
                  }
                  time1.Stop();
              }
              public void Test2()
              {
                  time2 = new Stopwatch();
                  StringBuilder str = new StringBuilder("1234"); ;
                  time2.Start();
                  for (int i = 0; i < 2000; i++)
                  {
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                      str.Append("1234");
                  }
                  time2.Stop();
              }
              public void GetTime()
              {
                  Console.WriteLine(time1.Elapsed.ToString());
                  Console.WriteLine(time2.Elapsed.ToString());
              }
          }
          class Program
          {
              static void Main(string[] args)
              {
      
                  TestString str = new TestString();
                  str.Test1();
                  str.Test2();
                  str.GetTime();
                  Console.ReadKey();
              }
          }
      Ответить
      • Тест некорректен. Проверяется совсем не то.
        Ответить
      • у StringBuilder необходимо вызвать метод ToString(); иначе тест совсем неправильный.
        В таком случае String += будет медленнее в 1,5 раза
        Ответить
    • Димка-никадимка:
      Не пишите так :)
      Ответить
    • Страшно, конечно, но если за такое убивать - программистов останется очень-очень мало :)
      Ответить
      • А если за такое не убивать, то за что же вообще убивать?
        Ответить
    • Ну и хуле страшного что используется сложение вместо StringBuilder.

      Некоторые долбаебы вообще пишут "ab" + "cd" через StringBuilder
      Ответить
    • Ребята, SQL injection is TextBox. Epiс Failure. Если кто не понимает, что с этим кодом не так - почитайте "Защищенный код". Все от этого выиграем.
      Ответить
    • вот долбаебы оптемизаторы поставь блять i=1 в циклах и сравни результать
      хуесосы больше 100 строк никогда кода не видали.
      Ответить
    • класика блин ))
      Ответить

    Добавить комментарий