Re: Error 80040e14 (ADO -2147217900) Die Datenbank-ID-X konnte nicht gefunden werden
From: Elmar Boye (ElmarB_at_gmx.net)
Date: 03/26/05
- Next message: Elmar Boye: "Re: IDENTITY Startwert und Loecher"
- Previous message: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- In reply to: Alexander Baumgart: "Re: Error 80040e14 (ADO -2147217900) Die Datenbank-ID-X konnte nicht gefunden werden"
- Messages sorted by: [ date ] [ thread ]
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
- Next message: Elmar Boye: "Re: IDENTITY Startwert und Loecher"
- Previous message: Elmar Boye: "Re: Ausführungsplan in SQL Server 2000"
- In reply to: Alexander Baumgart: "Re: Error 80040e14 (ADO -2147217900) Die Datenbank-ID-X konnte nicht gefunden werden"
- Messages sorted by: [ date ] [ thread ]
Relevant Pages
|