Как использовать Нулевой или пустой в сыром sql для присвоенного значения, которого нет в таблице? - PullRequest
0 голосов
/ 17 января 2019

Как проверить IsNullOrEmpty в RawSQL. Если контрольный номер и идентификатор отправителя оба имеют значения, то проверьте одинаковое условие для обоих. Если он имеет только один идентификатор отправителя, проверьте условие только для идентификатора отправителя и если он имеет только контрольный номерпроверить подобное условие только для контрольного номера.Это показывает ошибку как

Неверный синтаксис около *

using (var context = new BSoftWEDIIContext())
                {

                    if (!string.IsNullOrEmpty(controlNumber))
                    {
                        controlNumber = "*" + controlNumber + "*";
                    }
                    if (!string.IsNullOrEmpty(senderNumber))
                    {
                        senderNumber = "*" + senderNumber + "*";
                    }

                    var fileDetail = context.FileDetails
                        .SqlQuery("select * from FileDetails where @" + controlNumber.ToString()
                        +" is not null OR CONVERT(varchar(max), RawData) like '%" + controlNumber.ToString() 
                        + "%' AND CONVERT(varchar(max), RawData) like '%" + senderNumber.ToString()+"%'").ToList();
                    matchedFileId = fileDetail?.Select(a => a.Id).ToList();

                }

1 Ответ

0 голосов
/ 17 января 2019

Вы добавляете слишком много *, и полученный запрос строится неправильно. Проверьте состояние соответственно:

using (var context = new BSoftWEDIIContext())
            {

                if (!string.IsNullOrEmpty(controlNumber))
                {
                    controlNumber = controlNumber;
                }
                if (!string.IsNullOrEmpty(senderNumber))
                {
                    senderNumber = senderNumber;
                }

                var fileDetail = context.FileDetails.SqlQuery("select * from FileDetails where " + controlNumber.ToString() + " is not null" + " OR CONVERT(varchar(max), RawData) like '%" + controlNumber.ToString() + "%' AND CONVERT(varchar(max), RawData) like '%" + senderNumber.ToString() + "%'").ToList();
                matchedFileId = fileDetail?.Select(a => a.Id).ToList();
            }

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

https://docs.microsoft.com/en-us/dotnet/framework/data/adonet/ef/how-to-execute-a-parameterized-entity-sql-query-using-entitycommand

как изменить SQL-оператор на параметризованный запрос?

...