Гидра + MS SQL 2008 R2
Atom
01.10.2012
DrChemist


Второй день долблюсь – пытаюсь настроить связку с MSSQL, и не удается. Использую MS SQL 2008 R2 standard. Гидра 4.1.4 Базу создал скриптом trading.sql (взял с stocksharp.codeplex.com, dev/Documentation) Скрипт отработал нормально. База создалась, проблем не было. Добиться того, чтобы Гидра хоть как-то цеплялась к базе мне удалось только в такой конфигурации (из файла Hydra.exe.config):


……………..

……………..

----------------------------------------------

Остальные конфигурации не трогал При запуске гидра валится на этом коде:


private void InitializeDataSource() { _storageRegistry = new StorageRegistry(); ConfigManager.RegisterService(_storageRegistry);

…………….. if (_entityRegistry.Exchanges.Count < 4) { _entityRegistry.Exchanges.Save(Exchange.Test); <= Здесь валимся _entityRegistry.Exchanges.Save(Exchange.Micex); _entityRegistry.Exchanges.Save(Exchange.Rts); _entityRegistry.Exchanges.Save(Exchange.Ux); }

Поначалу эксепшен говори о том, что нет прав для INSERT операции. Проверил – действительно, скрипт создавал пользователя trading без прав. Тал пользователю trading все права на базу Trading. Но это помогло не сильно. После этого эксепшен стал другой:


2012-10-01 00:03:55.073|Error |StockSharp|System.Data.SqlClient.SqlException (0x80131904): Invalid column name 'TimeZoneInfo'. at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection) at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning() at System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj) at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString) at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async) at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, DbAsyncResult result) at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(DbAsyncResult result, String methodName, Boolean sendToPipe) at System.Data.SqlClient.SqlCommand.ExecuteNonQuery() at Ecng.Data.DatabaseCommand.b__6(DbCommand cmd) at Ecng.Data.DatabaseCommand.<>c__DisplayClass41.<Execute>b__1(DbConnection connection) at Ecng.Data.Database.GetConnection(Action1 action) at Ecng.Data.DatabaseCommand.Execute[TResult](IEnumerable1 input, Func2 handler) at Ecng.Data.DatabaseCommand.ExecuteNonQuery(SerializationItemCollection input) at Ecng.Data.Database.Execute(DatabaseCommand command, SerializationItemCollection source, Boolean needRetVal) at Ecng.Data.Database.Create(DatabaseCommand command, SerializationItemCollection input, Boolean needRetVal) at Ecng.Data.Database.<>c__DisplayClassc1.<Create>b__b() at Ecng.Data.Database.Create[TEntity](TEntity entity) at Ecng.Data.Database.Ecng.Serialization.IStorage.Add[TEntity](TEntity entity) at Ecng.Serialization.RelationManyList1.OnAdd(TEntity entity) at Ecng.Data.HierarchicalPageLoadList1.OnAdd(TEntity entity) at Ecng.Serialization.RelationManyList1.Add(TEntity item) at StockSharp.Algo.Storages.BaseStorageEntityList1.Save(T entity) at StockSharp.Hydra.MainWindow.InitializeDataSource() in D:\Work\StockSharp\StockSharp_4.1.4_Sources.Up\Hydra\Hydra\MainWindow.xaml.cs:line 160 at StockSharp.Hydra.MainWindow.<MainWindowLoaded>b__21() in D:\Work\StockSharp\StockSharp_4.1.4_Sources.Up\Hydra\Hydra\MainWindow.xaml.cs:line 483 at System.Threading.Tasks.Task1.InvokeFuture(Object futureAsObj) at System.Threading.Tasks.Task.InnerInvoke() at System.Threading.Tasks.Task.Execute()

Пытался добавить колонку TimeZoneInfo в таблицу Exchange. Вроде проходило, но потом опять где-то что-то ломалось. В общем, что-то делаю не так. Подскажите, люди добрые, как же подцепится-то к MSSQL базе.


Теги:


Спасибо:


guest13

Фотография
Дата: 01.10.2012
Ответить


Попробуйте сделать alter database set QUOTED_IDENTIFIER ON

Возможно придется еще пересоздать схему. И как вариант посмотреть что в настройках ODBC:

http://msdn.microsoft.com/en-us/library/ms174393.aspx

The SQL Server Native Client ODBC driver and SQL Server Native Client OLE DB Provider for SQL Server automatically set QUOTED_IDENTIFIER to ON when connecting. This can be configured in ODBC data sources, in ODBC connection attributes, or OLE DB connection properties. The default for SET QUOTED_IDENTIFIER is OFF for connections from DB-Library applications.

Спасибо:

Mikhail Sukhov

Фотография
Дата: 01.10.2012
Ответить


С тех пор, как перешли на SQLite, скрипт для MSSQL стал медленно, но верно расходится с последними изменениями в Гидре. Если с БД на ты, то можно самостоятельно поправить его.

Спасибо:

DrChemist

Фотография
Дата: 01.10.2012
Ответить


Михаил, спасибо что ответили. Модифицировать скрипт я попытаюсь.

Однако хотелось бы знать планы разработчиков насчет поддержки MS SQL

Планируете ли Вы в дальнейшем уделять внимание поддержке MS SQL или вы окончательно и бесповоротно переходите на SQLite? И еще, какова последняя версия S# и Гидры, которые еще в полном объеме поддерживает MS SQL?

Спасибо:

Mikhail Sukhov

Фотография
Дата: 01.10.2012
Ответить


Лучше вы скажите, чего ожидаете от Гидра+MSSQL. Может и огорода городить не придется.

Спасибо:

DrChemist

Фотография
Дата: 02.10.2012
Ответить


Мне нужно сохранять исторические данные сделки+стаканы. При этом хочется обеспечить максимально возможную сохранность записанных данных. Чтобы сбои в Гидре не приводили к какой-либо коррупции или потере ранее записанных данных. Хочется достичь максимально возможной стабильности работы связки Гидра+База при длительной работе. В стабильности MS SQL я более-менее уверен, а вот про SQLite мне мало что известно. Стабильность самой гидры, понятно, остается за скобками. Необходимо будет обеспечить параллельную работу Гидры на запись и торгового робота, который будет обращаться к базе за историческими данными. Не исключено, что потребуется работа нескольких гидр параллельно, записывающих потоки биржевых данных из нескольких источников. Ну и еще MS SQL знаю значительно лучше.

Примерно так.

К стати, в конце концов мне удалось запустить Гидру с MS SQL. Однако биржевые потоки Гидра по-прежнему пишет в файлы *.bin во внутренних каталогах типа «SBER@QJSIM». Я надеялся, что потоки будут направляться в ту же базу MS SQL. Это можно как-то настроить? Если нет, то все очень сильно усложняется…

Спасибо:

Mikhail Sukhov

Фотография
Дата: 02.10.2012
Ответить


DrChemist: К стати, в конце концов мне удалось запустить Гидру с MS SQL. Однако биржевые потоки Гидра по-прежнему пишет в файлы *.bin во внутренних каталогах типа «SBER@QJSIM». Я надеялся, что потоки будут направляться в ту же базу MS SQL. Это можно как-то настроить? Если нет, то все очень сильно усложняется…

Экспорт в БД.

Спасибо:


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy