SqlParameter установленное значение не работает - PullRequest
0 голосов
/ 09 мая 2018

Может ли кто-нибудь помочь мне понять, что я делаю неправильно в приведенном ниже фрагменте кода ?:

//....


internal static string InsertCorrespondenceRecipientItem(TbEmail email, Guid correspondenceId, Guid contactId) => $@"
         INSERT INTO CorrespondenceRecipientItems
           (Id, DateSent, Subject, ToEmail, [CorrespondenceId] , [ToId], [CorrespondenceRecipientId])
         VALUES
             ('{email.Guid}', '{email.DateSent}', @subject, @emailString, '{correspondenceId}', '{contactId}', '{email.Guid}')
        ";
    var sqlItemsUpdate = SqlHelpers.InsertCorrespondenceRecipientItem(item.email, correspondence.Guid, fromId);
                                var subject = item.email.Subject.Trim();
                                var emailString = item.email.EmailAddressString.Trim();

                                await _db.Database.ExecuteSqlCommandAsync(sqlItemsUpdate, new SqlParameter("@subject", subject), new SqlParameter("@emailString", emailString));

Результат в базе данных:

'7F856136-0036-4F68-249F-08D5AB631656', @subject, @emailString

Почему при выполнении не устанавливается значение для параметров?

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Использовать параметризованные запросы:

query = INSERT INTO ReportingLogs ([UserName], [FirstName]) значения (@ username, @ firstname)

SqlCommand sqlCommand = новый SqlCommand (cmdText, соединение); SqlCommand.Parameters.Add ("@ userName", SqlDbType.VarChar) .Value = имя пользователя

// Закрыть соединение в блоке finally или использовать оператор using ()

0 голосов
/ 09 мая 2018

Надеюсь, вам нужно рабочее решение, а не причина, по которой другое не работает ...:

//....
var subject= "test";
var emailString ="dot.dot@dot.com";
await _db.Database
        .ExecuteSqlCommandAsync($"INSERT INTO Table(Id, Subject, Email) VALUES (NEWID(), {subject }, {emailString})");

Edit: Как упомянуто в комментариях, я должен объяснить, что интерполированная строка с такими параметрами, как выше, будет параметризована EF-Core, если она объявлена ​​как встроенная.

Следующее утверждение не параметризовано и поэтому действительно уязвимо для sql-инъекций:

//....
    var subject= "test";
    var emailString ="dot.dot@dot.com";
string sql= "INSERT INTO Table(Id, Subject, Email) VALUES (NEWID(), {subject }, {emailString})";
    await _db.Database
            .ExecuteSqlCommandAsync(sql);

Для проверки информации вы можете проверить в Документы

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