Может ли строковая переменная содержать int - PullRequest
0 голосов
/ 01 марта 2019

У меня есть строковая переменная string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= {0}".Это прекрасно работает при запросе к VARCHAR столбцам, но если я запрашиваю столбцы типа int, я получаю сообщение об ошибке, вероятно, потому, что он запрашивает столбец типа int со строкой.

Поскольку textBox1.Text является вводом пользователя, есть ли способ, которым я могу интерпретировать его как int при запуске SqlDataAdapter cmd = new SqlDataAdapter(string.Format(SQLstrL,textBox1.Text), conn)?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

НЕ ДЕЛАЙТЕ ЭТОГО

То, что у вас есть, опасно уязвимо к атакам SQL-инъекций;это практически просит, чтобы его взломали.

Существует лучший способ выполнить то же самое, что безопасно от этих атак, а также решает вашу строку против проблемы int:

string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= @Parameter";
var cmd = new SqlCommand(SQLstr, conn);
cmd.Parameter.Add("@Parameter", SqlDbType.Int).Value = int.Parse(textBox1.Text);

или

string SQLstr = "SELECT [column] FROM [DB].[Table] WHERE [column]= @Parameter";
var cmd = new SqlCommand(SQLstr, conn);
cmd.Parameter.Add("@Parameter", SqlDbType.VarChar, 20).Value = textBox1.Text;

Обратите внимание, что вы все еще должны знать, какое значение вы ожидаете для этого места в запросе. Ничто не спасает вас от этого, потому что мы живем в строго типизированном мире.Даже метод AddWithValue(), который может определить тип данных, имеет веских причин не использовать его .

0 голосов
/ 01 марта 2019

Вы можете попробовать объединить пустую строку в конце результата sql.Если результатом является (в штучной упаковке) int, то + "" заставит его быть преобразованным в строку.

Я согласен с комментариями по поводу риска внедрения SQL.Это не то, что вы можете опубликовать, если текстовое поле не будет очень ограничено.

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