Здравствуйте!
Есть 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