Я думаю, что мой табличный адаптер ADO.Net неверно заполняет пробелы - PullRequest
0 голосов
/ 20 февраля 2011

Я пишу трехуровневое веб-приложение на C #, .Net3.5 с интерфейсом ASP.Net, серверным сервером SQL, взаимодействующим с ними через адаптеры таблиц и хранимые процедуры.Я наткнулся на некоторые странные функции.У меня есть таблица AdminUsers со столбцами

UserID int NOT NULL
Username varchar(20) NOT NULL
Hash varchar(50) NOT NULL
Salt varchar(50) NOT NULL
Email  varchar(50) NOT NULL

. В рамках процесса аутентификации для входа в систему я проверяю предоставленное имя пользователя в таблице перед сравнением паролей.Это не удается, потому что каждая запись для каждого столбца varchar в таблице, когда она возвращается с помощью оператора GetAdata TableAdapter, дополняется справа пробелами до 15 символов, т.е.

loginUsername = "joe"

storeUsername = "joe "

Интересно, что значение, хранящееся в БД, правильное, я проследил вставкустрока, чтобы обеспечить это.Таблица данных, отображающая эту таблицу, также отображается правильно.Эта проблема появляется только тогда, когда я вызываю следующий метод,

public static bool CheckIfUsernameAvailable(string username) {
        AdminUsersDataTable data = DataCalls.GetAdministers();
        foreach (Data.MissionEducate.AdminUsersRow row in data) {
            if (row.Username == username) {
                return false;
            }
        }
        return true;
    }

public static Data.MissionEducate.AdminUsersDataTable GetAdministers() {
        AdminUsersTableAdapter tblApt = new AdminUsersTableAdapter();
        return tblApt.GetData();
    }

И GetData () в основном вызывает SELECT * FROM AdminUsers

Любые предположения, почему пробелы добавляются в конец таблицы.выбрать команды результаты?Не похоже, что данные хранятся так.Адаптеры таблиц часто показывают это поведение?Какую дополнительную информацию я могу предоставить?

Большое спасибо.

1 Ответ

0 голосов
/ 25 февраля 2011

Похоже, что история таблицы предоставит информацию, необходимую для решения этой проблемы.При создании таблицы БД я использовал тип nchar вместо varchar.Nchar, очевидно, являющийся фиксированной длиной, заполнял бы значения, хранящиеся в нем, достаточным количеством пробелов, чтобы быть указанной длиной (15).Как ни странно, я понял это и изменил таблицу, удалил и заново вставил значения, удалил и заново создал адаптер таблицы, но проблема осталась.Однако я решил проблему, удалив таблицу, удалив адаптер таблицы, удалив связанные хранимые процессы, создав новую таблицу с другим именем, создав новый адаптер таблицы с новым именем, создал новые сохраненные процессы с новым именем и решение было решено.,К счастью, приложение все еще только в продвижении, так что не слишком много времени потеряно, но я, очевидно, не смог бы сделать это с живым приложением.Я не знаю, чего мне не хватало, чтобы ограничение длины nchar сохранялось на протяжении всех моих изменений.

...