Od kilku dni próbuję połączyć się z bazą danych DB2 na AS/400! Po zainstalowaniu klienta IBM System i Access for Windows mogłem utworzyć źródło danych ODBC z Visual Studio i po kliknięciu na "testuj połączenie" wszystko się udało. Jednak wykonanie prostej instrukcji SELECT skutkuje nieskończonym oczekiwaniem, ponieważ baza danych wydaje się na nią nie odpowiadać. Kod, którego używam do połączenia i zapytania, to:

            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();
            }

Wiersz, w którym wykonanie przestaje odpowiadać, to „da.Fill(dset);”. BTW używam Visual Studio 2010 i nie widzę żadnego komunikatu o błędzie, ale kod nigdy nie kończy "czekania" po tej linii. Czy masz jakies pomysły? Z góry dziękuję

1
user769564 19 lipiec 2011, 00:59
Jaka jest Twoja „prosta” instrukcja SELECT?
 – 
KevinDTimm
19 lipiec 2011, 01:05

2 odpowiedzi

Najlepsza odpowiedź

Nie jestem pewien, na czym polega problem, ale czy możesz spróbować użyć czytnika danych i sprawdzić, czy daje to lepsze wyniki?

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"];
        }
    }
}

Po drugie, czy jesteś pewien, że Twoje zapytanie zwróci się w rozsądnym czasie? Czy masz jakieś narzędzie, które pozwala uruchamiać zapytania bezpośrednio do bazy danych (nie znam DB2, nie jestem pewien, czy coś takiego istnieje). A może istnieje „profiler”, który pozwala „podejrzeć” zapytania do bazy danych w miarę ich pojawiania się?

Ponieważ nie pokazujesz swojego zapytania, zastanawiam się, czy jest to bardzo długotrwałe zapytanie. Jak długo czekałeś na powrót zapytania?

Jan

0
JohnD 19 lipiec 2011, 01:10
Dziękuję za szybką odpowiedź. Moje oryginalne zapytanie brzmiało SELECT * FROM MYTABLE, gdzie MYTABLE to tabela ostatnio utworzona i wypełniona 1 wierszem. Próbowałem wysłać zapytanie do tej bazy danych za pomocą eksploratora serwerów Visual Studio z tymi samymi wynikami (długie oczekiwanie), a także wypróbowałem kod, który zamieściłeś, tym razem wiersz, w którym zatrzymuje się wykonanie, to „używanie (OdbcCommand com = new OdbcCommand (SQL , połączenie, null))" . Zauważyłem coś innego, kiedy klikam opcję Visual Studio „Zweryfikuj składnię SQL”, pojawia się komunikat o błędzie „To polecenie nie jest obsługiwane przez tego dostawcę”
 – 
user769564
19 lipiec 2011, 01:36
Znalazłem ten wątek: groups.google.com/group/ibm_db /browse_thread/thread/… co oznacza, że ​​musisz skonfigurować coś, co nazywa się DB Connect. Zrobiłeś to?
 – 
JohnD
19 lipiec 2011, 15:17
Myślę, że DBConnect jest jak alternatywne oprogramowanie do łączenia się z db2 iSeries. Zamiast tego zainstalowałem i Access for Windows, ale myślę, że będę musiał spróbować, ponieważ nadal mam ten problem.
 – 
user769564
19 lipiec 2011, 19:53

Ustawienie flagi LONGDATACOMPAT jako 1 w ciągu połączenia zadziałało dla mnie.

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

Zobacz pełne wyjaśnienie w poniższym adresie URL

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

0
shajumohamed 18 kwiecień 2013, 16:48