2016-06-15 2 views
2

Я пытаюсь получить консольное приложение F #, которое запрашивает MS SQL SERVER, работающий в Docker. Я использую SQLProvider для запуска оператора select в отношении БД, вначале только вытаскивая int ID. Он отлично работает в Windows, но не в контейнере Docker. Она терпит неудачу с сообщением об ошибке: ИмяНе удалось прочитать даты с F # TypeProvider

System.ArgumentOutOfRangeException: No mapping exists from SqlDbType Date to a known DbType. 

Параметр: SqlDbType

Я попытался как моно: 4.2.3.4 и Teh FSharp/FSharp Docker изображения. Я также собираю библиотеку FSharp.Core со мной.

Любая помощь будет оценена по достоинству. Спасибо

Редактировать: Контейнер Docker работает на Linux, с моно версией 4.22.2.

Это мой запрос:

type private connection = SqlDataProvider<ConnectionString="CONNECTIONSTRING", 
             DatabaseVendor=Common.DatabaseProviderTypes.MSSQLSERVER, 
             UseOptionTypes=true> 

let private ctx = connection.GetDataContext() 

let private application = "E-Mail an PH - eFeedback" 

let history = 
    query { 
     for eh in ctx.Dbo.ActionHistoryEmail do 
     join gah in ctx.Dbo.GenericActionHistory on (eh.Id = gah.Id) 
     where (eh.Application = application) 
     select gah.Id 
    } 
    |> Seq.toList 

StackTrace:

System.TypeInitializationException: The type initializer for '<StartupCode$Company-EFeedbackExport>.$Repository' threw an exception. ---> System.ArgumentOutOfRangeException: No mapping exists from SqlDbType Date  to a known DbType. 
Parameter name: SqlDbType 
    at System.Data.SqlClient.SqlParameter.SetSqlDbType (SqlDbType type) <0x411a3080 + 0x00afb> in <filename unknown>:0 
    at System.Data.SqlClient.SqlParameter.set_SqlDbType (SqlDbType value) <0x411a3040 + 0x00017> in <filename unknown>:0 

    at (wrapper remoting-invoke-with-check) System.Data.SqlClient.SqlParameter:set_SqlDbType (System.Data.SqlDbType) 
    at [email protected] (Int32 providerType) <0x411a17c0 + 0x0008b> in <filename unknown>:0 
    at [email protected] (IEnumerable`1& next) <0x411999f0 + 0x007bb> in <filename unknown>:0 
    at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T].MoveNextImpl() <0x41199790 + 0x00069> in <filename unknown>:0 
    at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T].System-Collections-IEnumerator-MoveNext() <0x41199760 + 0x00017> in <filename unknown>:0 
    at Microsoft.FSharp.Collections.SeqModule.ToList[T] (IEnumerable`1 source) <0x411991c0 + 0x001ea> in <filename unknown>:0 
    at FSharp.Data.Sql.Providers.MSSqlServer.createTypeMappings (IDbConnection con) <0x411761d0 + 0x00097> in <filename unknown>:0 
    at FSharp.Data.Sql.Providers.MSSqlServerProvider.FSharp-Data-Sql-Common-ISqlProvider-CreateTypeMappings (IDbConnection con) <0x411761a0 + 0x00013> in <filename unknown>:0 
    at <StartupCode$FSharp-Data-SqlProvider>[email protected] (System.String runtimeAssembly, System.String resolutionPath, System.String[] referencedAssemblies, DatabaseProviderTypes providerType,  System.String owner, FSharp.Data.Sql.Runtime.SqlDataContext this, Microsoft.FSharp.Core.Unit unitVar0) <0x401883d0 + 0x00109> in <filename unknown>:0 
    at FSharp.Data.Sql.Runtime.SqlDataContext..ctor (System.String typeName, System.String connectionString, DatabaseProviderTypes providerType, System.String resolutionPath, System.String[] referencedAssemblies,  System.String runtimeAssembly, System.String owner, CaseSensitivityChange caseSensitivity) <0x401880b0 + 0x00153> in <filename unknown>:0 
    at <StartupCode$Company-EFeedbackExport>.$Repository..cctor() <0x40187650 + 0x002ab> in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at Program.main (System.String[] args) <0x4016de00 + 0x00087> in <filename unknown>:0 
[ERROR] FATAL UNHANDLED EXCEPTION: System.TypeInitializationException: The type initializer for '<StartupCode$Company-EFeedbackExport>.$Repository' threw an exception. ---> System.ArgumentOutOfRangeException: No  mapping exists from SqlDbType Date to a known DbType. 
Parameter name: SqlDbType 
    at System.Data.SqlClient.SqlParameter.SetSqlDbType (SqlDbType type) <0x411a3080 + 0x00afb> in <filename unknown>:0 
    at System.Data.SqlClient.SqlParameter.set_SqlDbType (SqlDbType value) <0x411a3040 + 0x00017> in <filename unknown>:0 

    at (wrapper remoting-invoke-with-check) System.Data.SqlClient.SqlParameter:set_SqlDbType (System.Data.SqlDbType) 
    at [email protected] (Int32 providerType) <0x411a17c0 + 0x0008b> in <filename unknown>:0 
    at [email protected] (IEnumerable`1& next) <0x411999f0 + 0x007bb> in <filename unknown>:0 
    at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T].MoveNextImpl() <0x41199790 + 0x00069> in <filename unknown>:0 
    at Microsoft.FSharp.Core.CompilerServices.GeneratedSequenceBase`1[T].System-Collections-IEnumerator-MoveNext() <0x41199760 + 0x00017> in <filename unknown>:0 
    at Microsoft.FSharp.Collections.SeqModule.ToList[T] (IEnumerable`1 source) <0x411991c0 + 0x001ea> in <filename unknown>:0 
    at FSharp.Data.Sql.Providers.MSSqlServer.createTypeMappings (IDbConnection con) <0x411761d0 + 0x00097> in <filename unknown>:0 
    at FSharp.Data.Sql.Providers.MSSqlServerProvider.FSharp-Data-Sql-Common-ISqlProvider-CreateTypeMappings (IDbConnection con) <0x411761a0 + 0x00013> in <filename unknown>:0 
    at <StartupCode$FSharp-Data-SqlProvider>[email protected] (System.String runtimeAssembly, System.String resolutionPath, System.String[] referencedAssemblies, DatabaseProviderTypes providerType,  System.String owner, FSharp.Data.Sql.Runtime.SqlDataContext this, Microsoft.FSharp.Core.Unit unitVar0) <0x401883d0 + 0x00109> in <filename unknown>:0 
    at FSharp.Data.Sql.Runtime.SqlDataContext..ctor (System.String typeName, System.String connectionString, DatabaseProviderTypes providerType, System.String resolutionPath, System.String[] referencedAssemblies,  System.String runtimeAssembly, System.String owner, CaseSensitivityChange caseSensitivity) <0x401880b0 + 0x00153> in <filename unknown>:0 
    at <StartupCode$Company-EFeedbackExport>.$Repository..cctor() <0x40187650 + 0x002ab> in <filename unknown>:0 
    --- End of inner exception stack trace --- 
    at Program.main (System.String[] args) <0x4016de00 + 0x00087> in <filename unknown>:0 
+0

Docker не имеет ничего общего с этим. Если ваше изображение Docker работает в Windows, вы все равно запускаете Windows. Если он работает в Linux, вы используете ядро ​​Mono или DotNet. Отправьте свой код, полное сообщение об исключении, включая стек вызовов (вызовите Exception.ToString()) и укажите, на каком .NET вы запускаете. –

+0

Укажите полное исключение, включая стек вызовов. Если это ошибка в Mono, стек вызовов покажет, какой метод вызвал исключение –

ответ

3

.NET не имеет тип Date еще. В стандарте .NET Date отображается в DateTime. Mono's SqlParameter выполняет это сопоставление в трех местах. Двое из них изображают Date и DateTime того же типа. third хотя и не на карте date. Я подозреваю, что стек вызовов показывает, что исключение выбрасывается внутри SetSqlDbType.

Пожалуйста, пост стек вызовов, за исключением в вопросе

Кажется, подобная Mono bug о Datetime2 была подана в 2014 г. Это было исправлено, но Date до сих пор отсутствует

+0

Это действительно 'SetSqlDbType'. [Аналогичная ошибка] (https://bugzilla.xamarin.com/show_bug.cgi?id=24719) исправлена ​​для DateTime2, но не Date –

+0

Это позор. благодаря – kaeedo

Смежные вопросы