Как избежать слеша? - PullRequest
       24

Как избежать слеша?

1 голос
/ 30 апреля 2010

У меня есть следующая команда sql через код и потому что параметр содержит косую черту, когда я оцениваю строку sql после обновления, столбец просто пуст.

sqlCommand.CommandText = String.Format("update {0} set {1}='{2}'where id = @Id",
                                        tableName, ColumnName, forwardSlashText);
sqlCommand.Parameters.Add("@Id", SqlDbType.UniqueIdentifier).Value = rowId;
numRowsAffected = sqlCommand.ExecuteNonQuery();

добавив log.debug к этой команде, я получаю следующий вывод ...

обновить набор my_table_name mime_type = 'application / pdf', где id = @ Id

Так что я бы предположил, что команда верна, но затем, глядя на строку, столбец mime_type пуст.

Ответы [ 3 ]

3 голосов
/ 30 апреля 2010

Косая черта не проблема. Хотя по теме, почему бы не передать forwardSlashText в качестве параметра, как вы это сделали для @Id?

2 голосов
/ 30 апреля 2010

Прежде всего, используя String.Format () для синтеза вашего запроса, следите за тем, чтобы не настраивать себя для атаки SQL-инъекцией. (Убедитесь, что tableName и ColumnName происходят из надежного источника.

Во-вторых, я бы так и сделал. Обратите внимание на квадратные скобки вокруг имен таблиц и столбцов (которые будут избегать любых прикольных символов, которые могут быть в именах таблиц или столбцов). Но что более важно, обратите внимание, что forwardSlashText теперь является параметром:

sqlCommand.CommandText = String.Format("update [{0}] set [{1}] = @val where id = @Id",
                                    tableName, ColumnName);
sqlCommand.Parameters.AddWithValue("@Id", rowId);
sqlCommand.Parameters.AddWithValue("@val", forwardSlashText);
numRowsAffected = sqlCommand.ExecuteNonQuery();
0 голосов
/ 30 апреля 2010

Если вы копируете и вставляете этот SQL в SQL Server Management Studio и выполняете его, на сколько строк это влияет? Вы должны исключить проблему с предложением WHERE, потому что это похоже на проблему. Вам также следует зарегистрировать значение идентификатора log.debug, чтобы убедиться, что оно работает правильно.

Скорее всего, это -1 или что-то еще, потому что проблема в другом месте.

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