Ведущие нули в типе данных nchar (2) MSSQL Server 2008 - PullRequest
0 голосов
/ 14 февраля 2012

У меня есть поле с именем mix с типом данных nchar (2) в таблицах пользователей. Набор данных в VS2010 был создан из этой таблицы. Смешивание полей в DataSet имеет тип System.String с максимальной длиной, установленной на 2 . У меня есть текстовое поле, которое привязано к этому набору данных. Теперь, если, например, я изменяю значение на «00» и нажимаю «Сохранить», я вижу, что когда программа обновляет DataSet обратно в базу данных:

usersTableAdapter.Update(usersDataSet.Users);

Значение текущего выбранного пользователя: " 00 ":

currentUser.mix = "00";

Но в базе данных значение было сохранено так: " 0 ". Я не понимаю, почему был удален первый ноль, а в конце добавлено пространство. Если, например, я поставлю «10» в текстовом поле и сохраню, он будет сохранен в базе данных как «10». Но если я введу в текстовое поле значение «01», опять начальный ноль будет удален -> «1».

1 Ответ

1 голос
/ 14 февраля 2012

Что-то где-то преобразует это значение в числовой тип (и, возможно, последняя вставка / обновление преобразует его обратно в строку). Вам нужно выяснить, где происходит это преобразование.

На основании вашего комментария:

Я отлаживал построчно и до финального Update кода, значение mix всегда в строке ("00")

Последнее, что нужно проверить, это посмотреть, какие команды были настроены для вашего SqlDataAdapter (usersTableAdapter). Проверьте InsertCommand и UpdateCommand и убедитесь, что команда является разумной, а все параметры имеют правильный тип.

Боюсь, я мало работал с доступом к данным на основе конструктора, но я считаю, что команды выбираются при первом создании адаптера таблицы в конструкторе - если вы хотите изменить форму набора данных ( например, изменить типы столбцов), я бы порекомендовал удалить и заново создать адаптер / набор данных (но эй, это должно быть легко с инструментами на основе конструктора, не так ли?)

...