ASP .NET: тип денег SQL Server и тип валюты .NET - PullRequest
1 голос
/ 21 апреля 2010

Тип денежных данных MS SQL Server, по-видимому, без проблем принимает хорошо отформатированное значение валюты (пример: $ 52,334.50 ). Из моего исследования MS SQL Sever просто игнорирует символы $ и ,. ASP .NET имеет объект параметра, который имеет свойство Type/DbType, а Currency - это доступная опция для установки в качестве значения. Однако, когда я устанавливаю параметр Type или DbType в валюту, он не будет принимать значения, такие как $ 52,334.50 . Я получаю сообщение об ошибке

Входная строка была в неправильном формате.

Когда я пытаюсь обновить / вставить. Если я не включу символы $ или ,, это, кажется, будет работать нормально. Кроме того, если я не укажу Type или DbType для параметра, он также будет работать нормально. Является ли это просто стандартным поведением, что объект параметра с его типом, установленным в валюту, будет по-прежнему отклонять символы $ и , в ASP .NET?

Вот пример объявления параметра (на странице .aspx):

<asp:Parameter Name="ImplementCost" DbType="Currency" />

Итак, вот еще немного информации: Приведенный выше фрагмент кода является частью параметров обновления команды обновления, объявленной для SqlDatasSource Control . Этот параметр обновит столбец (типа «деньги») таблицы в моей базе данных. Столбец в моей базе данных связан с элементом управления в элементе управления DetailsView .

Ответы [ 2 ]

0 голосов
/ 14 сентября 2015

Два вопроса. (1: уровень ASP .NET) и (2: SQL Server на сервере)

На стороне ASP вы пытаетесь поместить строку в денежном / десятичном виде.

Попробуйте преобразовать строку $ 123.45 в десятичный тип, а затем в ваше объявление. Или оставьте строку (с проверкой) или строку 123.45M (литерал M), потому что ...

На стороне SQL знак доллара - это литерал, который подразумевает тип данных денежной валюты с фиксированными 4 десятичными знаками. Так что это нормально, но SQL не игнорирует это. Он фактически использует его для приведения значения.

Вот почему я никогда не делаю то, что вы делаете. Вы только что обнаружили, что на самом деле происходит. Профиль IIS и настройки по умолчанию влияют на правильную интерпретацию доларов с запятыми и немецких знаков с десятичными знаками. Но 123,45 и 123,45 не означают одно и то же под обоими языковыми профилями. Также на стороне SQL происходят подобные вещи, например, когда буквенный знак доллара передается в sql. Поэтому вы можете очистить значение и получить его прямо на экране для пользователя, а затем передать десятичное значение в SQL без форматирования на уровне SQL, чтобы это не было скрытой проблемой. Лично я обычно передаю строку, исправляю ее и проверяю ее на сервере после ее разумной проверки на клиенте.

0 голосов
/ 21 апреля 2010

Посмотрите на переопределения в Parse - один из них принимает параметр типа формата, одно из допустимых значений - валюта.

...