2017-08-29 1 views
1

Je suis prêt à utiliser IBM DB .NET Provider pour MS .NET Core et ce que je fais en créant mon contexte chaque fois que j'essaie de l'utiliser, j'obtiens l'erreur suivante.L'index (basé sur zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste d'arguments IBM .net core

"L'index (base zéro) doit être supérieur ou égal à zéro et inférieur à la taille de la liste d'arguments."

classe Contexte

public class IBMContext : DbContext 
    { 

     public IBMContext() 
      : base() 
     { 
     } 

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) 
    { 

     optionsBuilder.UseDb2(@"Server=server;Database=DB;userid=user;password=pass", 
      p => p.SetServerInfo(IBMDBServerType.AS400, IBMDBServerVersion.AS400_07_01)); 

    } 

    public virtual DbSet<Table> Table{ get; set; } 

} 

Model.cs

[Table("Table")] 
public class Table 
{ 
    [Key] 
    public int Key{ get; set; } 

    public string Stat{ get; set; } 

    public string Jul{ get; set; } 

    public string App { get; set; } 

    public string Date { get; set; } 

} 

Utilisez

 static void Main(string[] args) 
    { 
     Console.WriteLine("Test"); 

     var context = new IBMContext(); 

     var result = context.Table.ToList(); 

     Console.ReadLine(); 
    } 

Paquet

IBM.EnityFrameworkCore (1.1.1.101)

erreur Full Stack

System.FormatException a eu lieu HResult = 0x80131537 message = index (base zéro) doit être supérieure ou égale à zéro et inférieure à la taille de la liste des arguments. Source = StackTrace: à IBM.Data.DB2.Core.DB2ConnPool.Open (connexion DB2Connection, String & szConnectionString, DB2ConnSettings & ppSettings, objet & ppConn) à IBM.Data.DB2.Core.DB2Connection.Open() à Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open() à Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMoveNext (tampon Boolean) à Microsoft.EntityFrameworkCore.Query.QueryMethodProvider. < _ShapedQuery> d__3 1.MoveNext() at Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.<_TrackEntities>d__15 2.MoveNext() à Microsoft.EntityFrameworkCore.Query.Internal.LinqOperatorProvider.ExceptionInterceptor 1.EnumeratorExceptionInterceptor.MoveNext() at System.Collections.Generic.List 1.AddEnumerable (IEnumerable 1 enumerable) at System.Linq.Enumerable.ToList[TSource](IEnumerable une source) à IBMEntityFrameworkCoreTest.Program.Main (String [] args) dans C: \ CodeBase \ IBMEntityFrameworkCoreTest \ IBMEntityFrameworkCoreTest \ Program.cs: ligne 24

+0

Pouvez-vous me dire quel port vous utilisez habituellement pour se connecter à AS400?Je reçois normalement une erreur de communication en utilisant DB2 pour Iseries –

+0

@AnaFranco Il est normalement 446. Quels sont les détails de l'erreur que vous obtenez? –

+0

Je reçois une erreur de licence, mais je crois que j'ai tout dans l'ordre, je peux même se connecter à l'aide de données studio ou exceler –

Répondre

2

J'ai découvert que cela est dû au fait qu'une autre version du pilote d'IBM est entrée dans ma variable d'environnement Path. Vous pouvez tester ce que Visual Studio est à la recherche à en exécutant une invite de commande Visual Studio et en tapant

db2level 

j'avais

C:\PROGRA~1\IBM\IBMDAT~1\BIN 

Vous devez supprimer ce et assurez-vous que vous avez

C:\Users\<user_name>\.nuget\packages\IBM.Data.DB2.Core\1.1.1.101\build\clidriver" 

La commande à exécuter pour mettre à jour la variable de chemin

Set PATH=%PATH%;(your new path); 

Vous pouvez trouver plus d'informations à ce sujet à

https://www.ibm.com/developerworks/community/forums/html/topic?id=9a107d00-d814-440c-b438-faa4d020ae1a&ps=25