Re: Error 80040e14 (ADO -2147217900) Die Datenbank-ID-X konnte nicht gefunden werden

From: Elmar Boye (ElmarB_at_gmx.net)
Date: 03/26/05


Date: Sat, 26 Mar 2005 10:56:59 +0100

Hallo Alexander,

Alexander Baumgart <al.baumgart@gmx.de> schrieb ...
> Kleine Nachfrage wenn ich
> die Execute Methode des Connection Objects nutze wie sieht es da mit
> der Anzahl von Verbindungen aus ? Da ich MSDE nutze darf ich aus
> Performance Gruenden nicht mehr als 8x gleichzeitige Action
> ausfuehren. Wenn ich die Execute Methode nutze wieviele "Wordload
> Govenor" nutze ich dann ?

Das ist so nicht richtig. Du darfst durchaus mehr Verbindungen haben,
nur werden aktive Ausführungen, die den Governor einschalten, abgebremst.
Siehe http://msdn.microsoft.com/library/en-us/architec/8_ar_sa2_0ciq.asp?frame=true

Für das Ausführen von DDL würde ich allerdings auf mehrere Verbindungen
verzichten und mit einer einzigen arbeiten. Denn spätestens wenn Daten
enthalten sind auf einer bereits bestehende Tabelle, z. B. ALTER TABLE
ist die Hardware - gerade bei MSDE - meist gut beschäftigt und eine
parallele Ausführung bringt nichts.

> Genau wie bisher 2x oder sogar nur 1x ? Der
> Ansatz mit dem Initial Catalog ist auch gut, weil ich in der Tat das
> Problem habe was was soll ich den beim Connection setzen. Existiert
> dieses MasterDB wirklich immer ?

Ja. Ohne die läuft nichts, denn dort stehen die Basis-Informationen
über alle anderen Datenbanken drin. Und so ist das die sicherste Wahl.
Und ein Benutzerkonto das Datenbanken anlegen darf, sollte auch Zugriff
darauf haben.

Sollte ich sicherheitshalber vorher
> auf Exists pruefen. Also kann man die loeschen eigenlich doch nicht
> wegen der ganzen Rechte auf neue Tabellen.
>
> DB Einstellungen des Connection Objects:
>
> if (m_pConn)
> {
> if (m_pConn->State == adStateClosed)

> {
> m_pConn->Provider = "sqloledb";
> m_pConn->Properties->Item["Data Source"]->Value = (_bstr_t)
> m_strDBServer.GetBuffer(0);
> m_pConn->Properties->Item["User ID"]->Value = "test";
> m_pConn->Properties->Item["Password"]->Value = "test";
>
> m_pConn->Properties->Item["Persist Security Info"]->Value = "False";
> m_pConn->Properties->Item["Prompt"]->Value = "4";
>

du solltest
> m_pConn->CursorLocation = adUseClient;
>
> try
> {
> m_pConn->Open(_T(""), _T(""), _T(""), adConnectUnspecified);
> strTemp.Format(_T("Connection Status: %s\r\n"), (LPCTSTR)
> GetState(m_pConn->State));
> m_strOutput+=strTemp;
> UpdateData(FALSE);
> }
> catch (_com_error &e)
> {
> CString strErrorLoc = _T("Connect");
> GenerateError(e, strErrorLoc);
> }
> }
> }
>
> Danach wird auf der bestehenden Connection nur noch mit Recordsets und
> Open gearbeitet.

Wenn im Kontext machbar, würde für das DDL eine eigene (nicht gepoolte)
Verbindung verwenden, die Kataloge anlegen und anschliessend für alles
weitere mit Pooling arbeiten.
Beim Pooling kannst Du Verbindungen gleich nach Nutzung wieder schliessen
und dem Ole den Rest überlassen.

> Da ich mehre Catalog (5) anlegen muss ich jedesmal
> auch den Catalog wechseln. Dieses geschieht per :

das würde ich in eine eigene Methode verlagern und die Connections
nach Gebrauch entsorgen.

>
> Neue Tabelle/Indexe lege ich wie folgt an :
>
> if (m_pConn)
> {
> if (m_pConn->State == adStateOpen)
> {
>
> TESTHR(m_pRst.CreateInstance(__uuidof(Recordset)));

wie bereits geschrieben, bringt der Umweg über Recordset/Open
da nichts.

>
> try
> {
> m_pRst->CursorLocation = adUseClient;
> m_pRst->PutRefActiveConnection(m_pConn);
> m_pRst->Open((LPCTSTR) strSQL, vtMissing, adOpenKeyset,
> adLockReadOnly , adCmdUnknown);
> }
> catch (_com_error &e)
> {
> CString strErrorLoc = _T("Create TableIndex\r\n") + strSQL;
> GenerateError(e, strErrorLoc);
> }
> DisConnectRst(m_pRst);
> }
> }
>
> Diese ist genau wie bei den Connection aber besser ueber die Execute
> Methode zu loesen da auch hier nichts zurueckgegeben wird.

Execute gibt im Standard ebenfalls ein Recordset zurück, das
entsorgt werden müsste, deswegen das explizite Angeben von
Options:=adExecuteNoRecords.

In den Fällen wo man mit dem Standard-Recordset (adOpenStatic,
adReadOnly) klarkommt ist im übrigen auch gegen Execute für
andere Zwecke nichts einzuwenden.

> Connection Polling sagt mir leider garnichts. Schlage ich aber nach
> damit ich verstehe was dieses -4 bewirkt.

Ich gehe mal davon aus Du hast das Platform SDK, dort oder in
MSDN Online nachzulesen unter:
http://msdn.microsoft.com/library/en-us/oledb/htm/oledbole_db_services.asp?frame=true

speziell das letzte Topic:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/oledb/htm/oledboverriding_provider_service_defaults.asp

Gruss
Elmar



Relevant Pages

  • Re: Error 80040e14 (ADO -2147217900) Die Datenbank-ID-X konnte nicht gefunden werden
    ... > Du solltest auf das Öffnen der Recordsets hier verzichten. ... > zudem damit zu tun haben, welche Database Einstellung das Connection ... Wenn ich die Execute Methode nutze wieviele "Wordload Govenor" nutze ... Initial Catalog ist auch gut, weil ich in der Tat das Problem habe was ...
    (microsoft.public.de.sqlserver)
  • [Full-Disclosure] Advanced usage of system() function.
    ... and call its arguments as a command for shell. ... as we can see we still didnt get what we want (typing exit ... Connection closed by foreign host. ... think what we want to execute. ...
    (Full-Disclosure)
  • Advanced usage of system() function.
    ... and call its arguments as a command for shell. ... as we can see we still didnt get what we want (typing exit we are ... Connection closed by foreign host. ... think what we want to execute. ...
    (Bugtraq)
  • Re: ADODB Command memory leak
    ... _ConnectionPtr conn = NULL; ... // Execute statement. ... > My logic is such that the connection to the database is not maintained ... Create/Append command parameters ...
    (microsoft.public.data.ado)
  • Re: Script Controlled Dynamic Task Execution
    ... My package had three connections to three ... and each had a transformation for itself. ... After posting, I just created three packages for each connection, and my ... >> need to execute one transformation on a text file, ...
    (microsoft.public.sqlserver.dts)