Понимание Классического ASP - PullRequest
2 голосов
/ 10 января 2012

Я просматриваю какой-то старый код и нашел кусок, который, похоже, не понимает смысла .... Насколько я могу судить, это просто простая вставка.но почему они сделали это так?было бы хорошо переписать во вставку, или я мог бы что-то сломать?

см. ниже:

Set TextRS = Server.CreateObject("ADODB.RecordSet")
 Set TextRS.ActiveConnection = Conn
 TextRS.Source = "SELECT IDX,TIMESTAMP,CURRENTFLAG,TEXT FROM " & TextTable & " WHERE 1=2 FOR UPDATE"
 TextRS.CursorLocation = 2
 TextRS.CursorType = 3
 TextRS.Open ,,,3

 TextRS.AddNew
 TextRS(0).Value = IDX
 TextRS(1).Value = Timestamp
 TextRS(2).Value = "Y"
  TextRS(3).AppendChunk TextPiece
 TextRS.Update

 TextRS.Close

Ответы [ 4 ]

5 голосов
/ 10 января 2012

Эта часть источника немного смутила меня ... where 1 = 2 ???Очевидно, у него была цель обеспечить отсутствие совпадения.

В любом случае, этот стиль программирования довольно стар с использованием технологии ADO, и люди, приходящие из DAO в ADO, часто открывали курсор для перебора базы данных таким образом ...он не следует современным лучшим практикам о том, как что-то делать, вы можете и должны заменить его оператором вставки!

Возможно, что он был написан до jet4.0 / access 2000, в этом случае это была попытка симулировать параметризованную хранимую процедуру.Хотя, если система вообще более современна, я настоятельно рекомендую использовать хранимую процедуру, поскольку она имеет множество преимуществ.Кэшированные планы выполнения, параметры, чтобы уменьшить шансы внедрения SQL

Я действительно писал код очень похоже на это 12 лет назад или около того: p В основном потому, что я просто не знал лучше, независимо от технологии виспользовать.

2 голосов
/ 11 января 2012

Ах, старый добрый классический ASP;)

1 = 2 заставляет sql никогда не возвращать совпадение.Это в основном способ построения команды (?), Так что вы можете «удобно» изменить значения, а затем обновление сохранит их.

Я видел это раньше, но сам никогда так не делал.Как уже говорили другие, простой паретизированный оператор INSERT будет лучше, ИМО.

1 голос
/ 10 января 2012

Я бы использовал оператор вставки. Вышеупомянутый код кажется немного «ленивым» ... как в «пусть ADO сделает всю работу за меня». Однако в этом нет ничего плохого. Часть where 1=2 должна была вернуть "пустую таблицу" ... хм ... я имею в виду набор записей.

1 голос
/ 10 января 2012

Я бы переписал это, используя параметризованный запрос ADO.Используемый метод имеет ненужный SELECT, что замедляет INSERT.

Этот код кажется немного неясным, но все, что они делают, это создают пустой экземпляр строки набора записей, чтобы можно было установить значения и сохранить набор записей.Это должно быть намного медленнее, чем делать прямую вставку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...