[MSSQL, C#] Странная конвертация.
От: Aen Sidhe Россия Просто блог
Дата: 26.10.06 07:54
Оценка:
Здравствуйте!

Есть user-defined scalar function на шарпе:
На тестовых данных выдает 0, хотя должна выдать 0.04000004838223630000
Однако, если раскомментировать исключение (в конце функции, выделено полужирным), то выброшенное исключение (запуск производится с теми же тестовыми исходными данными) говорит, что resultNumber = 0.04000004838223630000

Где у меня ошибка?
    [SqlFunction(DataAccess = DataAccessKind.Read)]
    public static SqlDecimal fn_GetRetroDiscount(SqlGuid seller, SqlGuid customer, SqlDateTime sqlBegin,
                                                 SqlDateTime sqlEnd,
                                                 SqlString type)
    {
        string queryStub =
            @"   SELECT   SUM(RetroDiscount.value) AS retroDiscount
                                FROM     RetroDiscount INNER JOIN
                                         RetroDiscountType ON RetroDiscount.type = RetroDiscountType.id
                                WHERE    (@begin between RetroDiscount.[begin] and RetroDiscount.[end]) and 
                                         (@end   between RetroDiscount.[begin] and RetroDiscount.[end])
                                GROUP BY RetroDiscount.customer, RetroDiscount.seller, RetroDiscount.type
                                HAVING   (RetroDiscount.customer = @customer) AND (RetroDiscount.seller = @seller) AND 
                                         (RetroDiscount.type = @type)";

        Guid discountTypeId = fn_GetId("RetroDiscountType", "name", type).Value;
        object result;
        using (SqlConnection connection = new SqlConnection(_connectionString))
        {
            connection.Open();

            using (SqlCommand cmd = new SqlCommand(queryStub, connection))
            {
                cmd.Parameters.Add(new SqlParameter("@begin", sqlBegin.Value));
                cmd.Parameters.Add(new SqlParameter("@end", sqlEnd.Value));
                cmd.Parameters.Add(new SqlParameter("@seller", seller.Value));
                cmd.Parameters.Add(new SqlParameter("@customer", customer.Value));
                cmd.Parameters.Add(new SqlParameter("@type", discountTypeId));

                result = cmd.ExecuteScalar();
            }
            connection.Close();
        }
        string resultString = result.ToString().Replace(".", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator).
            Replace(",", NumberFormatInfo.CurrentInfo.NumberDecimalSeparator);
        SqlDecimal resultNumber = new SqlDecimal(decimal.Parse(resultString, NumberStyles.Any, CultureInfo.CurrentCulture.NumberFormat));
        //throw new Exception(resultNumber.ToString());
        return resultNumber;
    }

    private static readonly string _connectionString = "context connection=true;Type System Version=Latest";
С уважением, Анатолий Попов.
ICQ: 995-908
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.