Удалить crlf в SQL-базе?

Я делаю упражнение с базой данных Northwind от Microsoft. Я пытаюсь заполнить значения из таблицы в Truedbgrid. Это все еще работало, но потом я заметил, что 3 столбца имеют crlf. Я пытался решить это с помощью REPLACE, но это не сработало.

Я изменил запрос (в наборе данных) с

SELECT ContactID, ContactType, CompanyName, ContactName, ContactTitle, Address, City, Region, PostalCode, Country, Phone, Extension, Fax, HomePage, PhotoPath, Photo FROM dbo.Contacts

to

SELECT ContactID, ContactType, CompanyName, ContactName, ContactTitle, REPLACE(Address,CHAR(13)+CHAR(10),' '), City, Region, PostalCode, Country, Phone, Extension, Fax, HomePage, PhotoPath, Photo FROM dbo.Contacts

Другого пути я не знаю. Я ищу в Интернете, если есть способ сказать Truedbgrid, удалите все crlf. Но я чего-то не нашел. В таблице есть то, что crlf невидимо. Я не могу это удалить. Есть какие идеи?

Мой код класса VB.NET:

Private Sub tdbgContactsParamentrieren()
    Try
        With tdbgContacts
            .AllowAddNew = False
            .AllowDelete = False
            .AllowColMove = False
            .AllowFilter = True
            .AllowSort = True
            .MultiSelect = MultiSelectEnum.None
            .AllowUpdate = True
            .AllowUpdateOnBlur = True
            .FilterBar = True

            .RowHeight = 22

            .TabAction = TabActionEnum.ColumnNavigation

            .MarqueeStyle = MarqueeEnum.HighlightCell

            .Columns(0).Caption = "ID"
            .Columns(1).Caption = "Type"
            .Columns(2).Caption = "Company"
            .Columns(3).Caption = "Name"
            .Columns(4).Caption = "Title"
            .Columns(5).Caption = "Address"
            .Columns(6).Caption = "City"
            .Columns(7).Caption = "Region"
            .Columns(8).Caption = "Postal Code"
            .Columns(9).Caption = "Country"
            .Columns(10).Caption = "Phone"
            .Columns(11).Caption = "Extension"
            .Columns(12).Caption = "Fax"
            .Columns(13).Caption = "Home Page"
            .Columns(14).Caption = "Photo Path"

            With .Splits(0)
                .AlternatingRowStyle = True
                .EvenRowStyle.BackColor = Color.LightYellow
                .EvenRowStyle.VerticalAlignment = AlignVertEnum.Center
                .OddRowStyle.VerticalAlignment = AlignVertEnum.Center

                .ColumnCaptionHeight = 30

                .DisplayColumns(0).Width = 42 'ID
                .DisplayColumns(1).Width = 52 'Type
                .DisplayColumns(2).Width = 218 'Company
                .DisplayColumns(3).Width = 168 'Name
                .DisplayColumns(4).Width = 168 'Title
                .DisplayColumns(5).Width = 150 'Country
                .DisplayColumns(6).Width = 257 'Address
                .DisplayColumns(8).Width = 56 'PostalCode
                .DisplayColumns(9).Width = 168 'City
                .DisplayColumns(10).Width = 90 'Phone
                .DisplayColumns(11).Width = 56 'Extension
                .DisplayColumns(12).Width = 93 'Fax
                .DisplayColumns(13).Width = 200 'HomePage

                For index As Integer = 0 To .DisplayColumns.Count - 1
                    .DisplayColumns(index).HeadingStyle.HorizontalAlignment = AlignHorzEnum.Center
                    .DisplayColumns(index).Locked = True
                Next
            End With
        End With
    Catch ex As Exception
    End Try
End Sub

РЕДАКТИРОВАТЬ:  введите описание изображения здесь

Это прежде, чем я внесу изменения.

Когда я это сделаю так:

SELECT ContactID, ContactType, CompanyName, ContactName, ContactTitle, REPLACE(Address,CHAR(13)+CHAR(10),' '), City, Region, PostalCode, Country, Phone, Extension, Fax, HomePage, PhotoPath, Photo FROM dbo.Contacts

or

SELECT ContactID, ContactType, CompanyName, ContactName, ContactTitle, REPLACE(REPLACE(Address, CHAR(13), ' '), CHAR(10), ' '), City, Region, PostalCode, Country, Phone, Extension, Fax, HomePage, PhotoPath, Photo FROM dbo.Contacts

or

SELECT ContactID, ContactType, CompanyName, ContactName, ContactTitle, REPLACE(REPLACE(cast(Address as nvarchar(max)), CHAR(13), ' '), CHAR(10), ' '), City, Region, PostalCode, Country, Phone, Extension, Fax, HomePage, PhotoPath, Photo FROM dbo.Contacts

Результат:  введите описание изображения здесь

РЕДАКТИРОВАТЬ 2:

Мне нужна таблица "Контакты".

Это моя структура базы данных:  введите описание изображения здесь


person a.b_om    schedule 07.10.2019    source источник
comment
Какая у вас была попытка с REPLACE? REPLACE может удалить и возврат каретки, и разрыв строки, но нам трудно (невозможно) сказать вам, почему это не сработало, когда мы не видим попытки.   -  person Larnu    schedule 07.10.2019
comment
@ a.b_om вы не разместили код, связанный с базой данных, только код конфигурации сетки. Если вам не нужен CR + LF в базе данных, не включайте его в свой ввод или фильтруйте ввод, прежде чем пытаться что-либо записать в базу данных.   -  person Panagiotis Kanavos    schedule 07.10.2019
comment
@Panagiotis ... А как ???   -  person a.b_om    schedule 07.10.2019
comment
Пожалуйста, удали код сетки и добавьте соответствующий код. Откуда берутся данные? Как это записать в базу данных? Он действительно содержит оба CR и LF? Или он содержит только один из них? Вам не придется ничего заменять в запросе, если вы очистите ввод в своем коде.   -  person Panagiotis Kanavos    schedule 07.10.2019
comment
Прежде всего, я только нарисовал эту таблицу в Truedbgrid. У меня нет кода, относящегося к базе данных. За исключением того, что вы имеете в виду класс Load_form. Во-вторых, я могу отправить не более 3 изображений с 3 столбцами в базе данных, 3 неправильными записями в моей программе и структурой базы данных. Я не думаю, что это сильно помогает, или я ошибаюсь?   -  person a.b_om    schedule 07.10.2019
comment
@ a.b_om См. Замена новой строки в TSQL.   -  person Andrew Morton    schedule 07.10.2019
comment
Когда я это делаю, он ничего не возвращает для адреса. Он делает то же самое, что и с первого раза (см. Вопрос).   -  person a.b_om    schedule 07.10.2019
comment
В вашей попытке есть функция REMOVE, а не REPLACE. REMOVE не является функцией T-SQL. Это выглядит чисто типографским.   -  person Larnu    schedule 07.10.2019
comment
С REPLACE тоже не работает   -  person a.b_om    schedule 07.10.2019
comment
Вы уверены? Я не могу воспроизвести проблему: db ‹› fiddle   -  person Larnu    schedule 07.10.2019
comment
Я отредактировал свой вопрос с более подробной информацией   -  person a.b_om    schedule 07.10.2019
comment
Согласно моему комментарию к вашему удаленному ответу: (вероятно) причина, по которой Address не имеет значений, заключается в том, что она не существует ни в одном из ваших 3 операторов SELECT. REPLACE(Address,CHAR(13)+CHAR(10),' ') не имеет псевдонима; так что это не адрес столбца Дайте столбцу псевдоним.   -  person Larnu    schedule 07.10.2019
comment
Что ж, я дам вам структуру базы данных. Подождите минутку   -  person a.b_om    schedule 07.10.2019


Ответы (1)


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

Поэтому, как упоминалось в комментариях, попробуйте дать выходу вашей функции REPLACE псевдоним, чтобы он имел узнаваемое имя:

REPLACE(REPLACE(cast(Address as nvarchar(max)), CHAR(13), ' '), CHAR(10), ' ') As Address,

Прямо сейчас, поскольку у этого столбца нет псевдонима, я ожидаю, что он не привязан к столбцу «Адрес» в сетке.


P.S. а как отдельная тема это:

Try
...
Catch ex As Exception
End Try

это антипаттерн. Поймать исключения - это нормально, но если вы это сделаете, вам нужно где-нибудь зарегистрировать подробности исключения (например, в журнале событий Windows или в файле). В противном случае, если что-то пойдет не так в вашем коде, вы не будете знать, что это было, и, следовательно, не сможете попытаться это исправить. Вы выбрасываете важную информацию, которая призвана помочь вам как разработчику решать проблемы.

person ADyson    schedule 07.10.2019
comment
ах ... Значит, я неправильно это понял раньше. Извините, я из Швейцарии и плохо владею английским. - person a.b_om; 07.10.2019