【发布时间】: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