【问题标题】:asp.net core 2.0 web app fails to connect to db2 on System iasp.net core 2.0 web 应用程序无法连接到 System i 上的 db2
【发布时间】:2017-11-06 22:46:14
【问题描述】:

我正在尝试开发一个 Web 应用程序以连接到 i 系列上的 db2,作为其中的一部分,我必须查询一个小文件,然后在视图中显示它的一些内容。

我是 asp.net 的新手,但在为 windows 桌面开发时使用 iDB2Connection、ODBC 和 OleDb 连接到同一系统 i 服务器。

我的网络应用程序的问题如下:

DB2Exception: ERROR [08001] [IBM] SQL30081N 检测到通信错误。正在使用的通信协议:“TCP/IP”。正在使用的通信 API:“SOCKETS”。检测到错误的位置:“xxx.xxx.xx.xx”。检测错误的通信功能:“连接”。协议特定错误代码:“10060”、“”、“”。 SQLSTATE=08001。

失败的代码sn-p:

public async Task<IActionResult> Index()
{
    DB2Connection con = new DB2Connection();
    con.ConnectionString = "Server=xxx.xxx.xx;Database=test;UID=xxx;
    pwd=xxxx;
    con.Open(); // fails here

    DB2Command com = new DB2Command("select * from lib.file", con);

    ...

我尝试添加 Connection reset = false,将 TCP keepalive 添加到注册表, 禁用防病毒/防火墙无济于事,阅读连接超时作为 10060 SQL 代码 30081N 的原因。

请帮我解决这个问题,我已经为此烦恼很久了。

【问题讨论】:

  • 我在粘贴和编辑时错过了连接字符串中的一些 dbl 引号,但是应用程序中的连接字符串很好,当我传递系统名称时,它会解析为错误中的正确 IP 地址.
  • 我有来自 NuGet 的 IBM.Data.DB2.Core 并且路径设置如常见问题解答中所述
  • IBM i 有点不同,因为数据库与操作系统集成。所以当你连接时,你一般不需要数据库名。事实上,这可能是阻碍你前进的原因。
  • @jmarkmurphy,谢谢,但我也试过了,如果我不给数据库,那么在设置连接字符串时我会得到一个无效的参数异常。
  • 在 IBM i 命令行上,键入 WRKRDBDIRE,然后找到 *LOCAL 所在的行。使用数据库的条目列中的值。如果这不起作用,您可以尝试使用数据库的数据库名称,但通常需要使用默认架构。

标签: c# asp.net-core asp.net-core-mvc ibm-midrange asp.net-core-2.0


【解决方案1】:

您必须在连接字符串中指定端口号(在我的情况下是 446):

Server=xxx.xxx.xxx.xxx:446;Database=test;UID=xxx;pwd=xxxx;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-19
    • 2017-02-24
    • 1970-01-01
    • 2018-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多