Второй день долблюсь – пытаюсь настроить связку с 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__DisplayClass4`1.<Execute>b__1(DbConnection connection)
at Ecng.Data.Database.GetConnection(Action`1 action)
at Ecng.Data.DatabaseCommand.Execute[TResult](IEnumerable`1 input, Func`2 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__DisplayClassc`1.<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.RelationManyList`1.OnAdd(TEntity entity)
at Ecng.Data.HierarchicalPageLoadList`1.OnAdd(TEntity entity)
at Ecng.Serialization.RelationManyList`1.Add(TEntity item)
at StockSharp.Algo.Storages.BaseStorageEntityList`1.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.Task`1.InvokeFuture(Object futureAsObj)
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.Execute()
----------------------------------------------
Пытался добавить колонку TimeZoneInfo в таблицу Exchange. Вроде проходило, но потом опять где-то что-то ломалось.
В общем, что-то делаю не так.
Подскажите, люди добрые, как же подцепится-то к MSSQL базе.