错误SQL30061N使用IBM.EntityFrameworkCore从Visual Studio 2017 c#中的DB2 iSeries中提取数据

问题描述 投票:0回答:1

我希望使用IBM.EntityFrameworkCore从位于IBM iSeries上的DB2文件/表中提取数据这是一项艰巨的任务,似乎我一直遇到问题。我们中的大多数人都能通过阅读本网站上的评论来解决这些问题,但是,我找不到任何可以帮助我解决这个问题的方法。

我执行了以下步骤:

  1. 为.Net Core创建了一个新的Console App Project
  2. 已安装IBM.EntityFrameworkCore版本1.1.1.101
  3. 更新了我的PATH环境变量,使其指向C:\ Users \ MyUserName.nuget \ packages \ ibm.data.db2.core \ 1.1.1.101 \ build \ clidriver \ bin
  4. 选中以确保在命令提示符下使用db2level命令安装并加载了正确的驱动程序。
  5. 在Console App Project中,我创建了三个名为iSeriesContext.cs,SYSVARIABLES.cs和Program.cs的类。

出于测试目的,我使用的是我认为在iSeries上标配DB2的系统模式/数据库。

Program.cs包含:

using System.Linq;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            iSeriesContext context = new iSeriesContext();
            var results = context.SYSVARIABLES.Where(p => p.VARIABLE_NAME == "test").FirstOrDefault();
        }
    //enter code here
    }
}

iSeriesContext.cs包含:

using System;
using Microsoft.EntityFrameworkCore;
using System.Linq;
using IBM.EntityFrameworkCore;
using IBM.EntityFrameworkCore.Storage.Internal;

namespace ConsoleApp1
{
    public class iSeriesContext : DbContext
    {
        public iSeriesContext() : base() { }
        public DbSet<SYSVARIABLE> SYSVARIABLES { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            optionsBuilder.UseDb2(@"server=192.0.0.1:446; Database=QSYS2; userid=username; password=password", p => p.SetServerInfo(IBMDBServerType.AS400, IBMDBServerVersion.AS400_07_01));
        }
    }
}

SYSVARIABLE.cs包含:

using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp1
{
    public class SYSVARIABLE
    {
        [Key]
        public string VARIABLE_SCHEMA { get; set; }
        public string VARIABLE_NAME { get; set; }
        public string SYSTEM_VAR_SCHEMA { get; set; }
    }
}

补充说明:

我已经确定我的iSeries操作系统是V7R1。

我已经确认我在iSeries上的drda服务正在侦听端口446,当我运行我的代码时,我确实看到“最后活动日期/时间”更新到当前时间。

解决方案编译时没有错误。但是,当我运行它时,我得到了一个

"IBM.Data.DB2.Core.DB2Exception: 'External component has thrown an exception.'" error on this line "var results = context.SYSVARIABLES.Where(p => p.VARIABLE_NAME == "test").FirstOrDefault();" in Program.cs

错误的详细信息是:

IBM.Data.DB2.Core.DB2Exception occurred
  HResult=0x80004005
  Message=ERROR [08004] [IBM] SQL30061N  The database alias or database name 

"QSYS2             " was not found at the remote node.  SQLSTATE=08004
    [IBM] SQL30061N  The database alias or database name "QSYS2             " was not found at the remote node.  SQLSTATE=08004

  Source=<Cannot evaluate the exception source>
  StackTrace:
   at IBM.Data.DB2.Core.DB2ConnPool.Open(DB2Connection connection, String& szConnectionString, DB2ConnSettings& ppSettings, Object& ppConn)
   at IBM.Data.DB2.Core.DB2Connection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryingEnumerable.Enumerator.BufferlessMoveNext(Boolean buffer)
   at Microsoft.EntityFrameworkCore.Query.QueryMethodProvider.<_ShapedQuery>d__3`1.MoveNext()
   at System.Linq.Enumerable.TryGetFirst[TSource](IEnumerable`1 source, Boolean& found)
   at Microsoft.EntityFrameworkCore.Query.Internal.QueryCompiler.<>c__DisplayClass20_0`1.<CompileQueryCore>b__0(QueryContext qc)
   at System.Linq.Queryable.FirstOrDefault[TSource](IQueryable`1 source)
   at ConsoleApp1.Program.Main(String[] args) in C:\Users\username\source\repos\IBMEntityFrameworkTest\ConsoleApp1\Program.cs:line 10
"

我觉得我非常接近。任何帮助,将不胜感激。

c# .net database linq
1个回答
0
投票

您可以尝试使用ODBC建立与此数据源的连接吗?执行此操作时,您将看到一个对话框,您可以在其中选择包库和库列表。该消息表明找不到QSYS2。因此,这可能不是包的正确名称。在下面的屏幕截图中,包名称是“QGPL”。

一旦配置了ODBC数据源,就可以使用一个非常简单的C#应用​​程序来测试它,该应用程序将System.Data.Odbc.OdbcConnection与我们的连接字符串一起使用,该连接字符串只使用该DSN。这样你可以绕过任何EF废话,并可以验证你是否真的可以读取你正在寻找的数据。一旦您证明您可以使用DSN和连接字符串来读取您的表格,那么您可以查看是否会导致与EF一起使用的新参数。

请注意,您也可以使用普通的旧ODBC来读取数据。这就是我们的工作。然后,一旦设置了DSN,我们就不必担心DB2古怪的语法之外的废话。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.