【问题标题】:Can not retrieve data from a ODBC connection to DB2 iSeries无法从与 DB2 iSeries 的 ODBC 连接中检索数据
【发布时间】:2013-04-18 20:48:23
【问题描述】:

我已经尝试连接到 AS/400 上的 DB2 数据库好几天了!在我安装 IBM System i Access for Windows 客户端后,我可以从 Visual Studio 创建一个 ODBC 数据源,当我单击“测试连接”时,它就成功了。但是,执行简单的 SELECT 语句会导致无限等待,因为数据库似乎没有响应它。 我用来连接和查询的代码是:

            OdbcConnection conn = new OdbcConnection(@"Dsn=TEST1;Uid=myuser;Pwd=mypwd;DBQ=mydb2");
            conn.Open(); 

            try
            {
                string cmmTxt = query;
                OdbcCommand cmd = new OdbcCommand(cmmTxt, conn);
                OdbcDataAdapter da = new OdbcDataAdapter(cmd);
                da.Fill(dset);
            }
            catch (Exception e)
            {
                Console.Write(e.StackTrace);
            }
            finally
            {
                conn.Close();
            }

执行停止响应的行是“da.Fill(dset);”。顺便说一句,我正在使用 Visual Studio 2010,我没有看到任何错误消息,但代码在该行之后永远不会完成“等待”。你有什么想法?提前致谢

【问题讨论】:

  • 您的“简单”SELECT 语句是什么?

标签: .net odbc db2


【解决方案1】:

我不确定到底是什么问题,但您可以尝试使用数据阅读器,看看是否能提供更好的结果?

OdbcConnection conn = new OdbcConnection(@"Dsn=TEST1;Uid=myuser;Pwd=mypwd;DBQ=mydb2");
string SQL = "SELECT COUNT(*) FROM MyTable";
using (OdbcCommand com = new OdbcCommand(SQL, connection, null))
{
    using (OdbcDataReader reader = com.ExecuteReader())
    {
        while (reader.Read())
        {
            var value = reader["MyColumn"];
        }
    }
}

其次,您确定您的查询会在合理的时间内返回吗?您是否有一些工具可以让您直接对数据库运行查询(我不熟悉 DB2,不确定是否有这样的东西)。或者是否有一个“分析器”可以让您在数据库查询进入时“窥视”它们?

由于您没有显示您的查询,我想知道它是否是一个运行时间很长的查询。您等待查询返回多长时间?

约翰

【讨论】:

  • 感谢您的快速回复。我的原始查询是 SELECT * FROM MYTABLE,其中 MYTABLE 是最近创建并填充了 1 行的表。我尝试使用 Visual Studio Server Explorer 查询该数据库,结果相同(等待很长时间),并且我尝试了您发布的代码,这次执行停止的行是“使用 (OdbcCommand com = new OdbcCommand(SQL ,连接,空))”。我注意到了其他事情,当我单击 Visual Studio 选项“验证 SQL 语法”时,会显示一条错误消息“此提供程序不支持此命令”
  • 我找到了这个帖子:groups.google.com/group/ibm_db/browse_thread/thread/…,这表明你需要配置一个叫做 DB Connect 的东西。你做到了吗?
  • 我认为 DBConnect 就像是连接到 db2 iSeries 的替代软件。我安装了 i Access for Windows,但我想我必须尝试一下,因为我仍然有这个问题。
【解决方案2】:

在连接字符串中将 LONGDATACOMPAT 标志设置为 1 对我有用。

[C#]
OdbcConnection con =
  new OdbcConnection("DSN=SAMPLE;UID=uid;PWD=mypwd;
  LONGDATACOMPAT=1;");

查看下面网址中的完整说明

http://pic.dhe.ibm.com/infocenter/db2luw/v9r7/index.jsp?topic=%2Fcom.ibm.swg.im.dbclient.adonet.doc%2Fdoc%2Fr0011829.html

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2016-03-09
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多