索引(从零开始)必须大于或等于零且小于参数列表IBM .net核心的大小

时间:2017-08-29 15:24:02

标签: entity-framework asp.net-core db2

我想要使用IBM DB .NET Provider for MS .NET Core,无论我每次尝试使用它时创建我的上下文我都会遇到以下错误。

"索引(从零开始)必须大于或等于零且小于参数列表的大小。"

上下文类

    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; }

}

使用

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

        var context = new IBMContext();

        var result = context.Table.ToList();

        Console.ReadLine();
    }

IBM.EnityFrameworkCore(1.1.1.101)

完整错误堆栈

发生了System.FormatException   的HResult = 0x80131537   Message = Index(从零开始)必须大于或等于零且小于参数列表的大小。   来源=   堆栈跟踪:    在IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection连接,String&amp; szConnectionString,DB2ConnSettings&amp; ppSettings,Object&amp; ppConn)    在IBM.Data.DB2.Core.DB2Connection.Open()    在Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()    在Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMoveNext(布尔缓冲区)    在Microsoft.EntityFrameworkCore.Query.QueryMethodProvider。&lt; _ShapedQuery&gt; 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 1 source)    在C:\ CodeBase \ IBMEntityFrameworkCoreTest \ IBMEntityFrameworkCoreTest \ Program.cs中的IBMEntityFrameworkCoreTest.Program.Main(String [] args):第24行

1 个答案:

答案 0 :(得分:2)

我发现这是因为IBM在我的环境变量Path中输入了另一个版本的驱动程序。您可以通过运行Visual Studio命令提示符并键入

来测试Visual Studio正在查看的内容
<select name="name" id="id1">
    <option value='value1'>
    <option value='value2'>
    <option value='value3'>
    <option value='value4'>
</select>

我有

db2level

你需要删除它并确保你有

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

运行以更新路径变量

所需的命令
C:\Users\<user_name>\.nuget\packages\IBM.Data.DB2.Core\1.1.1.101\build\clidriver" 

您可以在

找到有关此内容的更多信息

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