powered by simpleCommunicator - 2.0.48     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Точность типа Decimal
2 сообщений из 2, страница 1 из 1
Точность типа Decimal
    #32242147
Alexei Petrakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть хранимая процедура на SQL-сервере (MS SQL 2000), возвращающая значение типа decimal(18, 4) (4 знака после запятой) (курс валюты). Вот её текст:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
CREATE PROCEDURE [dbo].[GetUSDRate]
  @Date smalldatetime,
  @Rate decimal( 18 ,  4 ) output
AS
begin
  set nocount on

  select @Rate =  0 
  select @Rate = RateUSD from RateUsd
  where Data = @Date
end
GO


И есть функция на C# (VS.NET 2002), которая эту процедуру вызывает:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
public decimal wmGetUSDRate(DateTime Date)
{
    SqlCommand Cmd = new SqlCommand();
    Cmd.CommandText =  "GetUSDRate" ;
    Cmd.CommandType = CommandType.StoredProcedure;
    Cmd.Connection = sqlConnection2;
    Cmd.Parameters.Clear();
    Cmd.Parameters.Add( "@Date" , SqlDbType.SmallDateTime);
    Cmd.Parameters.Add( "@Rate" , SqlDbType.Decimal);
    Cmd.Parameters[ "@Rate" ].Direction = ParameterDirection.Output;
    //Cmd.Parameters[ "@Rate" ].Direction = ParameterDirection.InputOutput;//(вместо верхней строки вот эту)
    Cmd.Parameters[ "@Date" ].Value = Date;
    //Cmd.Parameters[ "@Rate" ].Value =  0 . 1111 

    if (this.sqlConnection2.State != ConnectionState.Open)
      this.sqlConnection2.Open();
    Cmd.ExecuteNonQuery();
    this.sqlConnection2.Close();
    return Convert.ToDecimal(Cmd.Parameters[ "@Rate" ].Value);
}


В приведённом виде функция возвращает значение, ОКРУГЛЁННОЕ до целого!!!
Но если вместо строки Cmd.Parameters["@Rate"].Direction = ParameterDirection.Output; написать Cmd.Parameters["@Rate"].Direction = ParameterDirection.InputOutput, а самому параметру @Rate присвоить указанное в комментарии дробное значение, то функция заработает так, как нужно. Мало того, если параметру присвоить десятичное значение не с четырьмя знаками после запятой, а, к примеру, с двумя, то и результат функции окажется округлённым до двух знаков.
Я так понимаю, что надо каким-то образом указать, сколько знаков после запятой необходимо хранить в параметре. Только вот как это сделать я не нашёл. Может кто подскажет...
Спасибо.

ПС: Сама хранимая процедура работает правильно (проверял через Query Analyser).
...
Рейтинг: 0 / 0
Точность типа Decimal
    #32336003
Фотография EvgeniyW
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так используйте System.Data.SqlTypes.SqlDecimal
Удачи)))
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Точность типа Decimal
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]