Ошибка в LINQ to SQL с пустыми строками в базе данных

#c# #.net #tsql #linq-to-sql #string-length

#c# #.net #tsql #linq-to-sql #длина строки

Вопрос:

Я использую LINQ to SQL уже много лет, но это первый раз, когда я вижу такое поведение.

У меня есть таблица БД с несколькими столбцами ( varchar(15) ), которые могут содержать пустые строки ( '' ). Я проверяю это, запустив LEN(Column) и проверив результат be 0 .

Теперь, когда я вызываю это из LINQ2SQL, оно возвращает поле объекта со строкой, содержащей один пробел ( string.Length == 1 ) .

Есть несколько обходных путей, которые я мог бы применить, например, создать их NULL в БД или обрезать строку, но я хотел бы знать, сталкивался ли кто-нибудь с этим раньше или известна ли ошибка (сообщается в MS Connect). Если нет, я сообщу об этом.

Спасибо.

Комментарии:

1. Происходит ли это, чтобы различать нулевое значение и пустую строку? Например: как бы вы сохранили в файле нулевую строку (file len = 0) и пустую строку (также file len = 0). В мире OO нулевая строка и пустая строка — это 2 разные вещи, тогда как в мире данных они кажутся одинаковыми

Ответ №1:

Проблема связана с LEN функцией:

 SELECT LEN(' ')
 

Возвращает 0 в SQL Server; это полный PITA.

Но

 SELECT DATALENGTH(' ')
 

Возвращает 1

Комментарии:

1. Большое спасибо! Один из наших специалистов по БД также узнал кое-что новое 🙂

2. Просто для добавления, LEN с игнорированием конечных пробелов.

3. Это раздражает меня уже несколько месяцев!

4. Редактировать: LEN будет игнорировать завершающий пробел

5. Своего рода следствием этого является то, что SELECT LEN(LTRIM(CHAR(9))) возвращает 1; CHAR(9) — символ табуляции; это также делает обрезку пробелов огромной проблемой!