Не удается получить данные из соединения ODBC с DB2 iSeries - PullRequest
1 голос
/ 19 июля 2011

Я пытался подключиться к базе данных DB2 в AS / 400 в течение нескольких дней! После того, как я установил клиент IBM System i Access для Windows, я мог создать источник данных ODBC из Visual Studio, и когда я нажимал «проверить соединение», это оказалось успешным. Однако выполнение простого оператора 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 и не вижу сообщений об ошибках, но код никогда не завершает «ожидание» после этой строки. Есть ли у вас какие-либо идеи? Заранее спасибо

Ответы [ 2 ]

0 голосов
/ 18 апреля 2013

Установка флага LONGDATACOMPAT как 1 в строке подключения работала для меня.

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

см. Полное объяснение в URL ниже

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

0 голосов
/ 19 июля 2011

Я не совсем уверен, в чем проблема, но вы можете попробовать использовать устройство для чтения данных и посмотреть, даст ли это вам лучшие результаты?

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, не уверен, есть ли такая вещь). Или есть «профилировщик», который позволяет «заглядывать» в запросы к базе данных по мере их поступления?

Поскольку вы не показываете свой запрос, мне интересно, является ли это очень длительным запросом. Как долго вы ожидали возврата запроса?

John

...