Есть ли способ отличить типы SQL Money и Decimal в .NET? - PullRequest
0 голосов
/ 07 июня 2018

Money и Decimal оба типа SQL интерпретируются как Decimal в .NET.Есть ли способ отличить?Я пытаюсь правильно отформатировать электронную таблицу Excel, но не знаю, какие поля должны быть отформатированы для валюты, а какие должны быть десятичными.Например:

+----------------+------------------+--------------+-----------------+
| Name (VarChar) | Weight (Decimal) | Cost (Money) | Inventory (Int) |
+----------------+------------------+--------------+-----------------+
| Widget         | 3.75             | 9.99         |              25 |
+----------------+------------------+--------------+-----------------+

С указанными выше заголовками, включая типы данных для целей этого вопроса, и query - хранимая процедура, которая выбирает из этой таблицы:

var result = conn.Query<dynamic>(query, parameters, commandType: CommandType.StoredProcedure).ToList();

foreach (var pair in (IDictionary<string, object>)result[0]) {
  Console.WriteLine($"{pair.Key}: {pair.Value.GetType().Name}");
}

Будетрезультат:

Name: String
Weight: Decimal
Cost: Decimal
Inventory: Int32

Я нашел это сообщение: Тип данных денег и десятичный тип SQL в .net , но, к сожалению, у меня нет стандартизированных имен столбцов, так как это предназначено для преобразования любыхнабор результатов в электронную таблицу Excel.

Я также рассмотрел вопрос об изменении хранимой процедуры (процедур) для предварительного ожидания знака доллара, когда это необходимо, но это потребовало бы гораздо больше работы и, скорее всего, нарушило бы другие функции.

Есть ли другой способ определения типа результатов SQL?

1 Ответ

0 голосов
/ 07 июня 2018

Ранее я сталкивался с подобными проблемами и только что запросил столбцы с sys.columns INNER JOIN sys.types ON columns.user_type_id = types.user_type_id.Но похоже, что вы используете хранимую процедуру.В SQL Server 2012 и более поздних версиях вы можете найти метаданные хранимой процедуры с помощью sys.dm_exec_describe_first_result_set_for_object(@object_id,1).

...