15.10.2011, 16:21 | #1 |
Участник
|
ADO NET типы. Как задать значение перечисления NET
Пытаюсь реализовать доступ к базе данных через ADO.NET.
Нужно выполнить хранимую процедуру. Использую пространство имен System.Data (точнее, для нужного значения типа команды достаточно . System.Data). Если убрать проверки и открытие соединения, то псевдокод следующий: X++: new InteropPermission(InteropKind::ClrInterop).assert(); command = new System.Data.OleDb.OleDbCommand(); command.set_CommandTimeout(timeOut); command.set_CommandText(sqlText); command.set_CommandType(... ?..); command.ExecuteNonQuery(); Пробовал System.Data.CommandType.StoredProcedure и System.Data.CommandType::StoredProcedure Выдает синтаксическую ошибку. |
|
15.10.2011, 16:33 | #2 |
Участник
|
Есть перечислимый тип System.Data.CommandType
X++: command.set_CommandType(System.Data.CommandType::Text); Последний раз редактировалось Ace of Database; 15.10.2011 в 16:35. |
|
15.10.2011, 16:46 | #3 |
Участник
|
Вот такой джоб у меня работает
X++: static void Job17(Args _args) { System.Data.OleDb.OleDbCommand command; System.Data.CommandType t; ; new InteropPermission(InteropKind::ClrInterop).assert(); command = new System.Data.OleDb.OleDbCommand(); command.set_CommandTimeout(300); command.set_CommandText("select * from t"); t = command.get_CommandType(); print t.ToString(); pause; command.set_CommandType(System.Data.CommandType::StoredProcedure); t = command.get_CommandType(); print t.ToString(); pause;} X++: info(strfmt("%1", t.ToString())); Последний раз редактировалось Ace of Database; 15.10.2011 в 16:52. |
|
15.10.2011, 16:50 | #4 |
Участник
|
А вот если использовать при вызове strfmt промежуточную строковую переменную, то работает
X++: System.Data.OleDb.OleDbCommand command; System.Data.CommandType t; str s; ; new InteropPermission(InteropKind::ClrInterop).assert(); command = new System.Data.OleDb.OleDbCommand(); command.set_CommandTimeout(300); command.set_CommandText("select * from t"); t = command.get_CommandType(); s = t.ToString(); info(strfmt("%1", s)); command.set_CommandType(System.Data.CommandType::StoredProcedure); t = command.get_CommandType(); s = t.ToString(); info(strfmt("%1", s)); |
|
15.10.2011, 17:14 | #5 |
Участник
|
У меня ругается не на этапе выполнения, а на этапе компиляции на:
Цитата:
command.set_CommandType(System.Data.CommandType::StoredProcedure);
ЗЫ: в стандартной DAX4 в этой ветке:
PSS: кстати, время от времени у меня ссылка System.Data пропадает из ветки References. |
|
15.10.2011, 17:19 | #6 |
Участник
|
Узел References приведен на рисунке.
|
|
|
За это сообщение автора поблагодарили: Raven Melancholic (5). |
15.10.2011, 17:47 | #7 |
Участник
|
Enum CommandType явно лежит в пространстве имен System.Data. Весь приведенный список References явно не имеет отношения к моей проблеме.
Ладно, попробую мой псевдокод реализовать в Visual Studio для проекта C#. Если там будет работать, а в аксе не будет, то буду искать причину. PS:а может быть ну его нафиг использование ADO.NET в аксе - вернусь к COM объектам ADO. С другой стороны, gl00mie реализовал работу с Excel через NET, я что хуже его? |
|
15.10.2011, 20:33 | #8 |
Участник
|
В коде C# перечисление спокойно работает. У меня в коде DAX4 выдает ошибку компиляции
Более того, добавляю в References ссылку на System.Data. В текущем сеансе могу пользоваться объектами, входящими в это пространство имен. Перезапускаю клиента, в References ссылка пропадает. Kernel version 4.0.2501.116 |
|
15.10.2011, 22:20 | #9 |
Administrator
|
В этой теме : проблема использования Excel через clr
значение енума достается через конструкцию: X++: fileFormat = ClrInterop::parseClrEnum('Microsoft.Office.Interop.Excel.XlFileFormat', 'xlTextWindows');
__________________
Возможно сделать все. Вопрос времени |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (5). |
16.10.2011, 09:59 | #10 |
Участник
|
Цитата:
X++: System.Data.CommandType type; ; type= ClrInterop::parseClrEnum('System.Data.CommandType', 'StoredProcedure'); command.set_CommandType(type); |
|
16.10.2011, 10:36 | #11 |
Участник
|
Цитата:
Сообщение от Raven Melancholic
Enum CommandType явно лежит в пространстве имен System.Data. Весь приведенный список References явно не имеет отношения к моей проблеме.
Ладно, попробую мой псевдокод реализовать в Visual Studio для проекта C#. Если там будет работать, а в аксе не будет, то буду искать причину. PS:а может быть ну его нафиг использование ADO.NET в аксе - вернусь к COM объектам ADO. С другой стороны, gl00mie реализовал работу с Excel через NET, я что хуже его? Цитата:
.NET Framework Enum Support
In Microsoft Dynamics AX 2009, you are now able to reference the members of .NET Framework enum types. For more information about accessing static members of a managed type, see How to: Access Static and Instance Members of .NET Framework Classes.
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Raven Melancholic (5). |
16.10.2011, 11:04 | #12 |
Участник
|
|
|
22.04.2015, 17:01 | #13 |
Участник
|
Добрый день!
Инициализация перечисления: X++: DocumentFormat.OpenXml.EnumValue`1 EditAsValues = DocumentFormat.OpenXml.Drawing.Spreadsheet.EditAsValues::OneCell; Есть ли возможность решить проблему с перечислениями .Net средствами Аксапты (не подключая dll сборки). |
|
22.04.2015, 17:35 | #14 |
Участник
|
тут проблема не в перечислении а в генерике
в ах вроде нет поддержки таких, только через обжегд с ними можно работать Последний раз редактировалось lvan; 22.04.2015 в 17:42. |
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (0). |
22.04.2015, 21:32 | #15 |
Участник
|
|
|
|
За это сообщение автора поблагодарили: Товарищ ♂uatr (1). |
20.07.2022, 18:05 | #16 |
Участник
|
Если не сложно, можете раскрыть тему более подробно?
X++: System.Type enumValue; System.Reflection.MethodInfo methodInfo; enumValue = System.Type::GetType("DocumentFormat.OpenXml.EnumValue`1"); methodInfo = enumValue.GetMethod("Value"); В частности мне надо в DocumentFormat.OpenXml.Spreadsheet.Alignment указать значение для горизонтальных и вертикальных границ. |
|
20.07.2022, 20:38 | #17 |
Участник
|
|
|
20.07.2022, 20:39 | #18 |
Участник
|
|
|
21.07.2022, 00:04 | #20 |
Участник
|
Я это все досконально прочитал. Но к сожалению знаний в данной области почти никаких
В частности я не понял нескольких моментов: 1) я присвоил enumValue тип, объявил нужный метод. Далее написал X++: parameters = new System.Object[1]();
parameters.SetValue(1, 1);
methodInfo.Invoke(enumValue, parameters); 2) Далее, если предположение верно, получается я должен таким же образом проработать Alignment? Т.е. объявляю его через GetType, присваиваю methodInfo значение Set_Horizontal, и уже через Invoke кладу полученный енум? Вообще есть какой-то мануал, который был бы понятен чайникам, чтобы не позориться на форуме? А то кроме axforum больше не откуда получить консультацию. |
|
Теги |
.net, ado, generic, net |
|
|