Как сохранить абзац в базе данных?

#c# #asp.net #database

#c# #asp.net #База данных

Вопрос:

я создаю сайт, который включает пользователя, отправляющего комментарии. Теперь я хочу сохранить разные комментарии.. я немного читал о Linq to SQL и ADO .. все они говорят о хранении небольших фрагментов информации, таких как имена, электронные письма, пароли и т.д. Но какой самый эффективный способ сохранить сообщения (которые будут включены на страницу, например, на YouTube) в конце?

Комментарии:

1. Является ли здесь проблемой кодировка / культура?

2. @Caspar: Почему это должно быть проблемой?

3. @Matti Virkkunen в зависимости от символов, которые вы хотите сохранить, nvarchar или varchar могут иметь значение.

4. @Caspar: Есть ли преимущество в использовании не n варианта текстовых типов данных?

5. @Caspar: На самом деле nvarchar(MAX) объем данных ограничен примерно двумя гигабайтами.

Ответ №1:

Я думаю, что комментарии на веб-странице по-прежнему считаются «маленькими битами». Просто убедитесь, что в вашем поле базы данных достаточно места ( nvarchar(MAX) если поддерживается, в противном случае text или ntext , в зависимости от выбранной вами базы данных)

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

Комментарии:

1. должен ли я использовать string builder .. или другую кодировку method..to запретить считать строку объектом?

2. @Dmitry: Я понятия не имею, что вы пытаетесь сказать. Хотите уточнить?

Ответ №2:

Точно таким же образом. Вы также хотите закодировать свое сообщение в html перед вставкой его в базу данных, чтобы избежать нежелательных sql-инъекций. У Linq нет таких проблем, поскольку он использует параметры для вставки вашего текста.

Вы должны предпочесть вставку текста на основе параметров, а не встроенную кодировку sql .

Комментарии:

1. Я не думаю, что вам следует что-либо кодировать в HTML в базе данных, вы захотите выполнить кодирование на стороне вывода, чтобы впоследствии было легко изменить форматирование / фильтрацию.

2. Вы всегда должны использовать подход, основанный на параметрах (в отличие от встроенного SQL). Таким образом, кодирование не требуется.

3. Даже при использовании sql на основе параметров вам все равно нужно сканировать и проверять наличие XSS и других подобных раздражающих векторов атаки. Я бы использовал nvarchar so, чтобы быть готовым к i18N.

4. Вы не хотите кодировать перед сохранением, вы хотите кодировать перед отображением, то есть после того, как вы вернете его из базы данных и перед тем, как встроить его в страницу. У этого есть три преимущества — 1) Вы не ограничиваете себя тем, где он выводится, например, если вы кодируете HtmlEncode, вы не сможете использовать его в RSS, где правила кодирования XmlEncoding отличаются, и 2) если функция кодирования содержит ошибку и исправлена, вы получите исправление, вместо того, чтобы проходить через базу данных, откодировать, а затем перекодировать и 3) проще в поиске. Всегда кодируйте в момент рендеринга.

Ответ №3:

В былые времена вы бы использовали устаревший тип данных Text, но он будет удален в следующей версии, поэтому рекомендуется использовать varchar (max).

Комментарии:

1. моя рекомендация заключается в том, что он должен использовать nvarchar (максимум)

2. Текст уже устарел, начиная с SQL Server 2005. Вы имеете в виду, что текст будет удален в следующей версии.

3. @Muhammad: используете ли вы UCS-2 (nvarchar) или нет (varchar) — это другой вопрос — некоторые рекомендуют всегда выбирать unicode (выбирая наименьший общий знаменатель, если хотите), а некоторые рекомендуют выбирать тип в зависимости от обстоятельств. В любом случае, рекомендуется установить максимальный размер хранилища равным «max».

Ответ №4:

вы также можете использовать ntext тип данных. Я использую это для текста.

Комментарии:

1. Microsoft рекомендует использовать nvarchar(MAX) вместо ntext .

Ответ №5:

В базе данных MSSQL есть text тип данных. Вы можете использовать его для комментариев. Тогда в программе это просто обычная строка.

Редактировать: Поскольку text он устареет, просто используйте varchar(max) так, как говорят другие.

Комментарии:

1. текст будет устаревшим в следующей версии Sql Server.