← Zurück

Гидра + MS SQL 2008 R2

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


<connectionStrings> <add name="SqlServerConStr" connectionString="Server=(local);Database=Trading;User ID=trading;Password=trading;" providerName=""/> </connectionStrings>

…………….. <param name="connectionString"> <value value="SqlServerConStr" typeConverter="Ecng.Configuration.ConnectionSettingsTypeConverter, Ecng.Configuration"/> </param>

…………….. <property name="Provider"> <!--<dependency type="Ecng.Data.Providers.SQLiteDatabaseProvider, Ecng.Data.Providers" />--> <dependency type="Ecng.Data.SqlServerDatabaseProvider, Ecng.Data" /> </property>

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


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.<ExecuteNonQuery>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 базе.

War dieses Thema hilfreich?

Thema teilen

Kommentare (6)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

guest13
guest13

Попробуйте сделать 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
Mikhail Sukhov

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

DrChemist
DrChemist Autor

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

DrChemist
DrChemist Autor

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

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

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

Mikhail Sukhov
Mikhail Sukhov

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

Экспорт в БД.