Выйдите из строки (добавьте наклонные черты) в VB.net?

Вот интересный отчет о теме.

К BLOB или Не К BLOB: устройство хранения данных Большого объекта в Базе данных или Файловой системе

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

файлы Меньшего размера могут эффективно храниться и поставляться с помощью базы данных в качестве механизма хранения. Большие файлы, вероятно, лучше всего хранились бы с помощью файловой системы, особенно если они будут часто изменяться/обновляться. (фрагментация блоба становится проблемой в отношении производительности.)

Вот дополнительная точка для учета. Одной из причин, поддерживающих использование базы данных для хранения блобы, является соответствие ACID. Однако подход, который тестеры использовали в отчете, (Опция с массовым протоколированием SQL Server), который удвоил пропускную способность SQL Server, эффективно изменил 'D' в ACID к 'd', поскольку данные блоба не регистрировались с начальными записями для транзакции. Поэтому, если полное соответствие ACID является важным требованием для Вашей системы, разделите на два числа пропускной способности SQL Server для записей базы данных при сравнении файлового ввода-вывода с вводом-выводом блоба базы данных.

10
задан DisgruntledGoat 11 August 2009 в 15:43
поделиться

4 ответа

Что именно вы имеете в виду, говоря о побеге? VB.NET не имеет «экранирования» в отличие от языков c-стиля.

Теперь, если вы хотите убедиться, что в переменной pClientId нет одиночных кавычек, у вас есть два варианта:

Вариант 1 (не рекомендуется для этого сценария): выполнить простую замену. Т.е.

pClientId = String.Replace(pClientId, "'","''")

Но, как уже отмечалось, я НЕ стал бы делать это для того, что кажется командой SQL. Что бы я сделал Вариант 2: используйте параметры данных для передачи параметров в вашу БД во время команд sql

Например:

Dim cn As New SqlConnection(connectionString)
Dim cmd As New SqlCommand
cn.Open
cmd.Connection=cn
cmd.CommandType=CommandType.StoredProcedure
cmd.CommandText= "sp_Message_insert"
cmd.Parameters.add(New SqlParameter("@clientid", pClientId)
cmd.Parameters.add(New SqlParameter("@message", pMessage)
cmd.Parameters.add(New SqlParameter("@takenby", pUserId)
cmd.Parameters.add(New SqlParameter("@recipients", pRecipients)
cmd.ExecuteNonQuery
16
ответ дан 3 December 2019 в 15:52
поделиться

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

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

Лучше всего не экранировать строки вообще, а использовать параметризованный запрос. Пример:

Dim cmd As New SqlCommand("sp_Message_insert")
cmd.Parameters.Add("@clientid").Value = pClientId
cmd.Parameters.Add("@message").Value = pMessage
cmd.Parameters.Add("@takenby").Value = pUserId
cmd.Parameters.Add("@recipients").Value = pRecipients
5
ответ дан 3 December 2019 в 15:52
поделиться

Я думаю, вы можете просто сделать два апострофа, чтобы создать один. Прошу прощения, если это не сработает, прошло некоторое время с тех пор, как я сделал это таким образом, я бы предложил использовать параметры SQL, это автоматически обработает ваши специальные символы и предотвратит SQL-инъекцию.

2
ответ дан 3 December 2019 в 15:52
поделиться

Не создавайте строку для подобного выполнения.
Именно поэтому возможны атаки SQL Injection.

Вместо этого используйте уровень доступа к данным, который позволяет создавать объекты параметров и связывать их с хранимой процедурой для выполнения.

2
ответ дан 3 December 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: