2012-02-14 2 views
0

У меня есть поле с именем смеси с типом данными NCHAR (2) у пользователей таблицы. DataSet в VS2010 был создан из этой таблицы. Полевая смесь в DataSet имеет тип System.String с максимальной длиной до . У меня есть текстовое поле, которое связывается с этим DataSet. Теперь, если, например, изменить значение «00» и нажмите кнопку Сохранить, я могу видеть, что, когда программа обновления набора данных в базу данных:ведущие нули в типе данных NCHAR (2) MSSQL Server 2008

usersTableAdapter.Update(usersDataSet.Users); 

Значение выбранного в данный момент пользователь «»:

currentUser.mix = "00"; 

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

+1

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

+0

Я отлаживал строку за строкой и до окончательного кода обновления, значение mix всегда в строке («00»), поэтому я не знаю, где будет происходить это преобразование. Я думаю, что это происходит где-то между набором данных и базой данных. –

+0

Изучите 'UpdateCommand' и' InsertCommand' (что я предполагаю, это 'SqlDataAdapter')' userTableAdapter'. Каковы их 'CommandText'ы? Есть ли какие-то параметры? Если они ошибаются, как был создан «userTableAdapter»? –

ответ

1

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

Основываясь на ваш комментарий:

Я отлаженной построчно и до конечного Update кода, значение смеси всегда в строке («00»)

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

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