Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

DbProviderFactory aus DbConnection

44 views
Skip to first unread message

Merwed

unread,
Jan 19, 2009, 8:14:34 AM1/19/09
to
Hi!

Ich hab ein Objekt vom Typ DbConnection und brauche eine
DbProviderFactory... Kann ich das irgendwie machen? Eigentlich bräuchte ich
ja den "InvariantProviderName", also zB System.Data.SqlClient. Den kann ich
aber in der Connection nirgendwo finden. Gibt es einen anderen Weg?

Viele Grüße!

XPost nach Diverse, fup2 mpdged.framework


Maro Maro

unread,
Oct 5, 2011, 9:18:13 AM10/5/11
to
Hi Merwed,

Versuchs mal mit einer Extention. Ich hab das f?r VB.Net gemacht, und den Code mit einem Tool auch nach C# convertiert.

VB.Net:
Imports System.Reflection
Imports System.Runtime.CompilerServices
Imports System.Data.Common

Module MyExtention

''' <summary>
''' Extention zur Erm?glichung des Zugriffs auf die Protected Property "DbProviderFactory"
''' </summary>
''' <param name="aConnection">The DbConnection to get the DBProviderFactory from.</param>
''' <returns>DbProviderFactory Property.</returns>
''' <remarks></remarks>
<Extension()>
Public Function getDBFactory(ByVal aConnection As DbConnection) As DbProviderFactory
If aConnection Is Nothing Then Return Nothing
Dim pinfo As PropertyInfo = GetType(DbConnection).GetProperty("DbProviderFactory", BindingFlags.Instance Or BindingFlags.NonPublic)
If pinfo IsNot Nothing Then
Try
Return CType(pinfo.GetValue(aConnection, {}), DbProviderFactory)
Catch ex As Exception
Return Nothing
End Try
Else
Return Nothing
End If
End Function

End Module


C#:
using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Data.Common;

static class MyExtention
{

/// <summary>
/// Extention zur Erm?glichung des Zugriffs auf die Protected Property "DbProviderFactory"
/// </summary>
/// <param name="aConnection">The DbConnection to get the DBProviderFactory from.</param>
/// <returns>DbProviderFactory Property.</returns>
/// <remarks></remarks>
[Extension()]
public static DbProviderFactory getDBFactory(DbConnection aConnection)
{
if (aConnection == null)
return null;
PropertyInfo pinfo = typeof(DbConnection).GetProperty("DbProviderFactory", BindingFlags.Instance | BindingFlags.NonPublic);
if (pinfo != null) {
try {
return (DbProviderFactory)pinfo.GetValue(aConnection, {

});
} catch (Exception ex) {
return null;
}
} else {
return null;
}
}

}

Dies ist mein erster Post, hoffentlich funktioniert die Formatierung.

Viele Gr??e
>> On Monday, January 19, 2009 10:58 AM Albert Andersson wrote:

>> Merwed schrieb:
>>
>> Was möchtest du genau Erreichen?
>>
>> Im SqlClient findest du das
>>
>> SqlCommand
>>
>> Diesem kannst du die Connection mitgeben und ausserdem das Query,
>>
>> SqlConnection SqlCon = new SqlConnection(ConnectionString);
>> SqlCommand SqlCmd = new SqlCommand();
>>
>> SqlCmd.Connection = SqlCon;
>> SqlCmd.CommandText = "select * from ..."


>>> On Monday, January 19, 2009 1:09 PM Merwed wrote:

>>> Ein Objekt verfügt über eine DbConnection, die von außen übergeben wurde und
>>> benötigt nun einen DbDataAdapter um Daten aus der Datenbank (deren Provider
>>> unbekannt ist) in ein DataTable-Objekt zu transferieren.
>>>
>>>
>>> Das Problem bestand ja genau darin, dass der Provider nicht bekannt ist!
>>>
>>> Inzwischen mach ich das so:
>>>
>>> public static DbProviderFactory GetFactory(DbConnection Connection) {
>>>
>>> DataTable dt = DbProviderFactories.GetFactoryClasses();
>>>
>>> foreach(DataRow r in dt.Rows) {
>>> DbProviderFactory f = DbProviderFactories.GetFactory(r);
>>> DbConnection c = f.CreateConnection();
>>> if(c.GetType().FullName == Connection.GetType().FullName)
>>> return f;
>>> }
>>>
>>> return null;
>>> }


>>>> On Monday, January 19, 2009 2:11 PM Peter Götz wrote:

>>>> Hallo Merwed,
>>>>
>>>>
>>>> Das könnte z.B. wahlweise eine SqlConnection,
>>>> eine OleDbConnection oder eine OraclConnection
>>>> sein.
>>>>
>>>>
>>>> Der wiederum könnte enstpr. des Typs der DbConnection
>>>> ein SqlDataAdapter, ein OleDbAdapter oder ein
>>>> OracleDataAdapter sein.
>>>>
>>>>
>>>> nachdem Du die DbConnection mit
>>>> Dim Cnn as SqlConnection = DirectCast (DbConnection, SqlConnection)
>>>> oder
>>>> Dim Cnn = DirectCast (DbConnection, OleDbConnection)
>>>> oder
>>>> Dim Cnn = DirectCast (DbConnection, OleDbConnection)
>>>>
>>>> in den tatsächlichen Typ umgewandelt hast, kannst Du bei
>>>> der OleDbConnection auf die Eigenschaft Provider zugreifen.
>>>>
>>>> DirectCast(Cnn, OleDbConnection).Provider
>>>>
>>>> Bei SqlConnection und OracleConnection ist Provider ohnehin
>>>> klar.
>>>>
>>>> Der nachfolgende Code sollte das Prinzip
>>>> veranschaulichen:
>>>>
>>>> Select Case True
>>>> Case (TypeOf Cnn Is SqlConnection)
>>>> DA = New SqlDataAdapter
>>>>
>>>> Case TypeOf Cnn Is OleDbConnection
>>>> DA = New OleDbDataAdapter
>>>>
>>>> Case TypeOf Cnn Is OracleConnection
>>>> DA = New OracleDataAdapter
>>>> End Select
>>>>
>>>> Gruß aus St.Georgen
>>>> Peter Götz
>>>> www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


>>>>> On Monday, January 19, 2009 3:26 PM Stefan Falz [MVP] wrote:

>>>>> Hallo Merwed,
>>>>>
>>>>> "Merwed" schrieb:
>>>>>
>>>>>
>>>>> http://msdn.microsoft.com/de-de/library/system.data.common.dbconnection.dbproviderfactory.aspx
>>>>>
>>>>>
>>>>> Der aktuellen Verbindung? Hmmm, das weiß ich so auch nicht,
>>>>> sorry. Alle registrierten Anbieter findest Du so heraus:
>>>>>
>>>>> http://msdn.microsoft.com/de-de/library/system.data.common.dbproviderfactories.getfactoryclasses.aspx
>>>>>
>>>>> --
>>>>> Tschau, Stefan
>>>>> Microsoft MVP - Visual Developer ASP/ASP.NET
>>>>> http://www.asp-solutions.de/ - Consulting, Development
>>>>> http://www.aspnetzone.de/ - ASP.NET Zone, die ASP.NET Community


>>>>>> On Tuesday, January 20, 2009 4:19 PM Marc Fischer wrote:

>>>>>> Alle DBConnection haben dasselbe Interface implementiert über welches man
>>>>>> dann auch solche Komponenten an Propertys von Klassen andübeln kann.


>>>>>>> On Wednesday, January 21, 2009 9:05 AM Merwed wrote:

>>>>>>> Meine DbConnection hat jedenfalls keine Eigenschaft die den DataProvider
>>>>>>> angeben würde.


>>>>>>>> On Wednesday, January 21, 2009 9:08 AM Merwed wrote:

>>>>>>>> Das ist ja alles schön und gut aber auch alles andere als allgemein und mit
>>>>>>>> viel Code verbunden. Da bevorzuge ich doch meine eigene Lösung, die immerhin
>>>>>>>> automatisch alle (in der machine.config) hinterlegten Provider erkennt
>>>>>>>> (Aktuelles Beispiel: Installation des SQL Express 2008 erweitert die
>>>>>>>> machine.config um den Provider für SqlCe. Das wird dann automatisch mit
>>>>>>>> berücksichtigt).


>>>>>>>>> On Wednesday, January 21, 2009 9:12 AM Merwed wrote:

>>>>>>>>> Genau. So mach ich das ja jetzt auch (siehe Posting vom 19.01.2009, 19:09
>>>>>>>>> Uhr). Leider muss man dann erstmal für jeden der ermittelten Provider ein
>>>>>>>>> DbConnection-Objekt instanziieren, um dann über einen Vergleich der Typen
>>>>>>>>> herauszufinden, ob der erzeugte Connection-Typ dem Typ der fraglichen
>>>>>>>>> Connection entspricht. Funktionieren tut es aber gut und es ist auch
>>>>>>>>> allgemein.


>>>>>>>>>> On Wednesday, January 21, 2009 11:33 AM Peter Götz wrote:

>>>>>>>>>> Hallo Merwed,
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> "Viel Code" ist doch ein relativer Begriff.
>>>>>>>>>> Mit "allgemein" wirst Du spätestens dann ein Problem
>>>>>>>>>> bekommen, wenn ein providerspezifischer DataAdapter,
>>>>>>>>>> DataReader, Command usw. erstellt werden soll.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Und was hast Du dann davon?
>>>>>>>>>> Wie erstelltst Du dann zum Provider passende Commands,
>>>>>>>>>> DataAdapter, DataReader, usw.?
>>>>>>>>>>
>>>>>>>>>> Gruß aus St.Georgen
>>>>>>>>>> Peter Götz
>>>>>>>>>> www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


>>>>>>>>>>> On Wednesday, January 21, 2009 11:36 AM Peter Götz wrote:

>>>>>>>>>>> Hallo Merwed,
>>>>>>>>>>>
>>>>>>>>>>> ich ja den "InvariantProviderName", also zB
>>>>>>>>>>> http://msdn.microsoft.com/de-de/library/system.data.common.dbproviderfactories.getfactoryclasses.aspx
>>>>>>>>>>>
>>>>>>>>>>> womit es dann mit der "Allgemeinheit" schon mal vorbei ist.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Und providerspezifisch und eben nicht "allgemein" ist dann
>>>>>>>>>>> auch das Erstellen von Commands, DataAdaptern, DataReadern
>>>>>>>>>>> Parameter-Objekten usw.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Was ist daran "allgemein"?
>>>>>>>>>>>
>>>>>>>>>>> Gruß aus St.Georgen
>>>>>>>>>>> Peter Götz
>>>>>>>>>>> www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


>>>>>>>>>>>> On Thursday, January 22, 2009 5:49 AM Merwed wrote:

>>>>>>>>>>>> Wir reden irgendwie an einander vorbei, oder??
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Das ist doch der Sinn der ganzen Übung: Ich bekomme aus der übergebenen
>>>>>>>>>>>> Connection (deren fomaler Typ DbConnection ist und deren aktueller Typ
>>>>>>>>>>>> irgendeinem spezifischen Provider entspricht) ein Factory-Objekt. Und GENAU
>>>>>>>>>>>> DIESES Factory-Objekt ist fortan in der Lage, alle providerspezifischen
>>>>>>>>>>>> Klassen zu erzeugen. Es ist als allgemeines DbProviderFactory deklariert,
>>>>>>>>>>>> erhält in GetFactory(DbConnection) aber eine providerspezifische
>>>>>>>>>>>> Factory-Instanz zugewiesen (zB SqlClientFactory).
>>>>>>>>>>>>
>>>>>>>>>>>> Wenn die übergebene DbConnection also vom Typ SqlConnection ist, dann
>>>>>>>>>>>> erhalte ich aus GetFactory eine SqlClientFactory. Und diese SqlClientFactory
>>>>>>>>>>>> erzeugt mir dann sehr schön meine SqlCommands (im Gewand eines DbCommands),
>>>>>>>>>>>> meine SqlDataAdapter (im Gewand eines DbDataAdapters), usw. Alles sehr schön
>>>>>>>>>>>> allgemein: Ich kann eine beliebige Connection (die von DbConnection
>>>>>>>>>>>> abstammt) hineingeben und alle Routinen funktionieren - obwohl allgemein
>>>>>>>>>>>> formuliert - providerspezifisch. tadaa
>>>>>>>>>>>>
>>>>>>>>>>>> Viele Grüße


>>>>>>>>>>>>> On Thursday, January 22, 2009 5:50 AM Merwed wrote:

>>>>>>>>>>>>> Peter my friend, you got it all wrong.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Siehe Posting vom 22.01.2009, 11:49 Uhr.


>>>>>>>>>>>>>> On Thursday, January 22, 2009 7:31 AM Volkmar Neubauer wrote:

>>>>>>>>>>>>>> Jede DbConnection ist von einem best. Typ von dem aus man auf dem
>>>>>>>>>>>>>> DataProvider schliessen kann.


>>>>>>>>>>>>>>> On Thursday, January 22, 2009 10:58 AM Merwed wrote:

>>>>>>>>>>>>>>> Das ist ganz toll. Nur muss der Code dann vorher schon wissen, welche
>>>>>>>>>>>>>>> DataProvider es gibt. Da müsste dann in etwa stehen
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> if(conn is SqlConnection)
>>>>>>>>>>>>>>> return new SqlClientFactory();
>>>>>>>>>>>>>>> if(conn is OdbcConnection)
>>>>>>>>>>>>>>> return new OdbcClientFactory();
>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> Der Nachteil liegt auf der Hand:
>>>>>>>>>>>>>>> Alle unterstützten DataProvider müssen explizit aufgezählt werden; künftige
>>>>>>>>>>>>>>> Erweiterungen können so keine Berücksichtigung finden - dazu wäre eine
>>>>>>>>>>>>>>> Anpassung des Codes nötig!
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> In meinem Code werden alle Dataprovider, die dem System bekannt sind
>>>>>>>>>>>>>>> automatisch unterstützt.


>>>>>>>>>>>>>>>> On Friday, February 06, 2009 1:35 PM Markus Springweiler wrote:

>>>>>>>>>>>>>>>> Merwed,
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Den Vorschlag wollte ich dir damals auch machen (aber andere waren
>>>>>>>>>>>>>>>> schneller).
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Heute stehe ich vor demselben Problem: Gegeben ist eine bestehende
>>>>>>>>>>>>>>>> Verbinding (DbConnection) und erzeugt werden soll einer neuer
>>>>>>>>>>>>>>>> EntityConnectionString (via EntityConnectionStringBuilder), und dort gibt
>>>>>>>>>>>>>>>> es eine string-Property "ProviderType".
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Soweit so gut, auf dem Entwicklungsrechner. Dummerweise ist die Anwendung
>>>>>>>>>>>>>>>> ein WCF-Service welcher auf einem IIS(7) läuft; bzw. dann nicht mehr, weil
>>>>>>>>>>>>>>>> die testweise Instanziierung einer SqlCe-Connection eine Exception wirft,
>>>>>>>>>>>>>>>> welche trotz try-catch die ganze Anwendung abschiesst, und der
>>>>>>>>>>>>>>>> anschließende DrWatson den Server für eine halbe Minute lang quasi
>>>>>>>>>>>>>>>> unbenutzbar macht:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> "
>>>>>>>>>>>>>>>> Der Prozess wurde aufgrund einer unbehandelten Ausnahme beendet.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Exception: System.DllNotFoundException
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Message: Die DLL "sqlceme35.dll": Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> StackTrace: bei System.Data.SqlServerCe.NativeMethods.SafeRelease(IntPtr& ppUnknown)
>>>>>>>>>>>>>>>> bei System.Data.SqlServerCe.SqlCeConnection.ReleaseNativeInterfaces()
>>>>>>>>>>>>>>>> bei System.Data.SqlServerCe.SqlCeConnection.Dispose(Boolean disposing)
>>>>>>>>>>>>>>>> bei System.Data.SqlServerCe.SqlCeConnection.Finalize()
>>>>>>>>>>>>>>>> "
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Der Code dafür:
>>>>>>>>>>>>>>>> if ( _providerCache.Count == 0 )
>>>>>>>>>>>>>>>> foreach ( var factoryRow in DbProviderFactories.GetFactoryClasses().AsEnumerable() )
>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>> var providerName = factoryRow.Field<string>("InvariantName");
>>>>>>>>>>>>>>>> try
>>>>>>>>>>>>>>>> {
>>>>>>>>>>>>>>>> using ( var probeConn = DbProviderFactories.GetFactory(factoryRow).CreateConnection() )
>>>>>>>>>>>>>>>> _providerCache.Add(probeConn.GetType(), providerName);
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>> catch { /* nix (schlechter Stil!) */ }
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Hat jemand eine einleuchtende Erklärung, wieso das gleich den ganzen
>>>>>>>>>>>>>>>> Prozess zerschießt?
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Im Moment verwende ich jetzt statt des Providercaches:
>>>>>>>>>>>>>>>> _providerCache[connection.GetType()]
>>>>>>>>>>>>>>>> einfach den Namespace der Connection:
>>>>>>>>>>>>>>>> connection.GetType().Namespace
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> Das funktioniert zumindest bei SqlServer, Oracle, MySql, SQLite, etc., nur
>>>>>>>>>>>>>>>> bei SqlCe.3.5 nicht, so es in einer anderen (Nicht-WCF)-Anwendung jemals
>>>>>>>>>>>>>>>> benötigt werden sollte.
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>> /\/\arkus.


>>>>>>>>>>>>>>>>> On Saturday, February 07, 2009 11:43 AM Elmar Boye wrote:

>>>>>>>>>>>>>>>>> Hallo Markus,
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Markus Springweiler schrieb:
>>>>>>>>>>>>>>>>> > (Ausnahme von HRESULT: 0x8007007E) kann nicht geladen werden.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Das weist zunächst darauf hin, dass der SQL Server Compact Treiber
>>>>>>>>>>>>>>>>> nicht richtig installiert ist. Die Programmdateien sollten sich unter:
>>>>>>>>>>>>>>>>> "%ProgramFiles%\Microsoft SQL Server Compact Edition\v3.5"
>>>>>>>>>>>>>>>>> befinden.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Die aktuelle Version findest Du unter:
>>>>>>>>>>>>>>>>> <URL:http://www.microsoft.com/Downloads/details.aspx?FamilyID=dc614aee-7e1c-4881-9c32-3a6ce53384d9>
>>>>>>>>>>>>>>>>> "Microsoft SQL Server Compact 3.5 Service Pack 1 and Synchronization Services
>>>>>>>>>>>>>>>>> for ADO.NET version 1.0 Service Pack 1 for Windows Desktop"
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Einen "Abschuß" des Rechners sollte das natürlich nicht hinlegen.
>>>>>>>>>>>>>>>>> Aber Compact ist auch schon anderweitig mal unangenehm aufgefallen :-(
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Der Compact Treiber ist einer der Problemfälle, denn es gibt viele Varianten:
>>>>>>>>>>>>>>>>> <URL:http://blogs.msdn.com/sqlservercompact/archive/2007/12/19/connectivity-cross-version-compatibility-sql-server-compact-3-5.aspx>
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Und der Namespace ist für die aktuelleren immer gleich und zum Teil
>>>>>>>>>>>>>>>>> werden gleiche DLL Namen verwendet. Beim Instanznamen ist allerdings
>>>>>>>>>>>>>>>>> die Versionnummer angehängt:
>>>>>>>>>>>>>>>>> "System.Data.SqlServerCe.3.5"
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Zwar IMHO ist das nicht zu Ende gedacht worden, da dadurch das Ermitteln
>>>>>>>>>>>>>>>>> eines Providers via Factory Instanzname nicht eindeutig machbar ist.
>>>>>>>>>>>>>>>>> Und umgekehrt die Verbindungen keinen Verweis auf die Factory enthalten.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Der "Erkennungsalgorithmus" ist insofern problematisch.
>>>>>>>>>>>>>>>>> Es es das ein Treiber nicht richtig installiert ist, Reste in
>>>>>>>>>>>>>>>>> der Konfiguration übriggeblieben sind oder andere Voraussetzungen
>>>>>>>>>>>>>>>>> nicht erfüllt sind.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Da es keine wirklich universelle Lösung gibt, würde ich an Deiner
>>>>>>>>>>>>>>>>> Stelle, es für die von Dir genutzten Treiber fest eincodieren.
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Gruß Elmar


>>>>>>>>>>>>>>>>>> On Saturday, February 07, 2009 11:59 AM Thorsten Doerfler wrote:

>>>>>>>>>>>>>>>>>> Hallo Elmar,
>>>>>>>>>>>>>>>>>> Elmar Boye schrieb:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Magst Du da vielleicht ins Detail gehen?
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> Thorsten Dörfler
>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>> Microsoft MVP Visual Basic
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> vb-hellfire visual basic faq | vb-hellfire - einfach anders
>>>>>>>>>>>>>>>>>> http://vb-faq.de/ | http://www.vb-hellfire.de/


>>>>>>>>>>>>>>>>>>> On Saturday, February 07, 2009 12:48 PM Elmar Boye wrote:

>>>>>>>>>>>>>>>>>>> Thorsten Doerfler schrieb:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Die letzte Woche in mpd.sqlserver:
>>>>>>>>>>>>>>>>>>> <URL:http://groups.google.com/group/microsoft.public.de.sqlserver/browse_thread/thread/2b7a0e74ea661fa2#>
>>>>>>>>>>>>>>>>>>> dort zwar ein Client Szenario, aber ein eher unbefriedigender Ausgang.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Und bei Recherchen dazu tauchten diverse Ungereimtheiten auf,
>>>>>>>>>>>>>>>>>>> der gepostete Link rührt u. a. daher.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Gruß Elmar


>>>>>>>>>>>>>>>>>>>> On Saturday, February 07, 2009 2:12 PM Thorsten Doerfler wrote:

>>>>>>>>>>>>>>>>>>>> Elmar Boye schrieb:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Danke. Ähnliches habe ich leider auch schon erlebt. Das andere ist die
>>>>>>>>>>>>>>>>>>>> lausige Performance die SQL Compact in Verbindung mit LINQ an den Tag legt.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thorsten Dörfler
>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> Microsoft MVP Visual Basic
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> vb-hellfire visual basic faq | vb-hellfire - einfach anders
>>>>>>>>>>>>>>>>>>>> http://vb-faq.de/ | http://www.vb-hellfire.de/


>>>>>>>>>>>>>>>>>>>>> On Sunday, February 08, 2009 3:50 PM Elmar Boye wrote:

>>>>>>>>>>>>>>>>>>>>> Hallo Thorsten,
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Thorsten Doerfler schrieb:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Wenn Du eine kleine fixe Datenbank willst nimm SQLite für ADO.NET:
>>>>>>>>>>>>>>>>>>>>> <URL:http://sqlite.phxsoftware.com/>
>>>>>>>>>>>>>>>>>>>>> läuft fast überall und ist klein und schnell.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Linq2Sql klappt damit naturgemäß nicht, da nur SqlClient und SqlCe.
>>>>>>>>>>>>>>>>>>>>> Aber eine Unterstützung fürs Entity Framework gibt es -
>>>>>>>>>>>>>>>>>>>>> getestet habe ich das allerdings bisher nicht.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Gruß Elmar


>>>>>>>>>>>>>>>>>>>>>> On Sunday, February 08, 2009 5:03 PM Thorsten Doerfler wrote:

>>>>>>>>>>>>>>>>>>>>>> Hallo Elmar,
>>>>>>>>>>>>>>>>>>>>>> Elmar Boye schrieb:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Synchronization Services? ;-)
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Zudem wäre der Umstellungsaufwand im laufenden Projekt nicht ohne. An
>>>>>>>>>>>>>>>>>>>>>> kritischen Stellen sind wir jetzt dazu übergegangen die Daten klassisch
>>>>>>>>>>>>>>>>>>>>>> über DataReader abzugreifen, das ist stellenweise um den Faktor 20
>>>>>>>>>>>>>>>>>>>>>> schneller, wenn in die gleichen Objekte gekapselt wird.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Werd das Entity Framework demnächst generell mal antesten bezüglich der
>>>>>>>>>>>>>>>>>>>>>> Performance, aber mir nicht allzuviel davon versprechen.
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Thorsten Dörfler
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> Microsoft MVP Visual Basic
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> vb-hellfire visual basic faq | vb-hellfire - einfach anders
>>>>>>>>>>>>>>>>>>>>>> http://vb-faq.de/ | http://www.vb-hellfire.de/


>>>>>>>>>>>>>>>>>>>>>>> On Sunday, February 08, 2009 5:36 PM Elmar Boye wrote:

>>>>>>>>>>>>>>>>>>>>>>> Hallo Thorsten,
>>>>>>>>>>>>>>>>>>>>>>> Thorsten Doerfler schrieb:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Das sieht es wohl noch etwas mau aus:
>>>>>>>>>>>>>>>>>>>>>>> <URL:http://sqlite.phxsoftware.com/forums/t/1381.aspx>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Zu den Synchronization Services kann ich derzeit nur wenig besteuern.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> ... auch EF ist im allgemeinen IMHHO leider nicht so ganz das Wahre
>>>>>>>>>>>>>>>>>>>>>>> (und Linq2Sql eine Sackgasse).
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Das vertrackte mit den derzeitigen Microsoft ADO.NET Erweiterungen:
>>>>>>>>>>>>>>>>>>>>>>> Sie basteln immer auf lange dran herum, aber das Endergebnis
>>>>>>>>>>>>>>>>>>>>>>> ist nicht so das Gelbe vom ...
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>> Gruß Elmar


>>>>>>>>>>>>>>>>>>>>>>>> On Monday, February 09, 2009 3:57 AM Markus Springweiler wrote:

>>>>>>>>>>>>>>>>>>>>>>>> Elmar ,
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> In normalen Endanwendungen (z.B. LINQPad) geht der schon, auch auf dem
>>>>>>>>>>>>>>>>>>>>>>>> Wcf-Server -- seltsamerweise bekam der Wcf-Client sogar noch eine
>>>>>>>>>>>>>>>>>>>>>>>> FaultException deren Text etwas in der Art sagte, daß SqlCe innerhalb eines
>>>>>>>>>>>>>>>>>>>>>>>> ASP.NET-Kontexts nichts verwendet werden kann (und danach oder
>>>>>>>>>>>>>>>>>>>>>>>> währenddessen wurde dann der Service abgeschossen).
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> "Rechner" wäre dann doch etwas zuviel. Es war "nur" der jeweilige w3p.exe
>>>>>>>>>>>>>>>>>>>>>>>> Prozess.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Das wiederum ist eindeutig (C#-Expression, LINQPad-tauglich):
>>>>>>>>>>>>>>>>>>>>>>>> from row in System.Data.Common.DbProviderFactories.GetFactoryClasses().AsEnumerable()
>>>>>>>>>>>>>>>>>>>>>>>> let factory = System.Data.Common.DbProviderFactories.GetFactory(row)
>>>>>>>>>>>>>>>>>>>>>>>> let connection = factory.CreateConnection()
>>>>>>>>>>>>>>>>>>>>>>>> select new {name = row.Field<string>("InvariantName"), type = connection.GetType().AssemblyQualifiedName}.ToString()
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> ergibt:
>>>>>>>>>>>>>>>>>>>>>>>> { name = System.Data.SqlServerCe, type =
>>>>>>>>>>>>>>>>>>>>>>>> System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe,
>>>>>>>>>>>>>>>>>>>>>>>> Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 }
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> und
>>>>>>>>>>>>>>>>>>>>>>>> { name = System.Data.SqlServerCe.3.5, type =
>>>>>>>>>>>>>>>>>>>>>>>> System.Data.SqlServerCe.SqlCeConnection, System.Data.SqlServerCe,
>>>>>>>>>>>>>>>>>>>>>>>> Version=3.5.1.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 }
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Ich sehe da keinen Interpretationsspielraum.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Das stimmt allerdings: Auf meinem Privatrechner ist der alte Ce-Treiber
>>>>>>>>>>>>>>>>>>>>>>>> wohl noch irgendwo in der machine.config gelistet, aber die Assemblies
>>>>>>>>>>>>>>>>>>>>>>>> existieren nicht mehr.
>>>>>>>>>>>>>>>>>>>>>>>> Aber solange Exceptions ordentlich geschluckt werden können, sollte das ja
>>>>>>>>>>>>>>>>>>>>>>>> kein Problem sein (ists aber).
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> Es würde schon reichen, wenn die gefangene Exception nicht den ganzen
>>>>>>>>>>>>>>>>>>>>>>>> Prozess eliminieren würde.
>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>>>> /\/\arkus.


>>>>>>>>>>>>>>>>>>>>>>>>> On Monday, February 09, 2009 5:04 AM Elmar Boye wrote:

>>>>>>>>>>>>>>>>>>>>>>>>> Hallo Markus,
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Markus Springweiler schrieb:
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Das war (bewußt) flapsig geschrieben...
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Was dort hinterlegt schon - nur muß man dazu wissen, welche "Name"
>>>>>>>>>>>>>>>>>>>>>>>>> die Factory bekommen hat, und dafür gibt es keine eindeutige Festlegung.
>>>>>>>>>>>>>>>>>>>>>>>>> (Und was die vielen anderen - nicht von Microsoft stammenden - Provider tun,
>>>>>>>>>>>>>>>>>>>>>>>>> will ich gar nicht so genau wissen).
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Aber lassen wir das theoretisieren an dieser Stelle.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Die spezielle Ausnahme und das Beenden des Prozesses durch den CE Treiber
>>>>>>>>>>>>>>>>>>>>>>>>> ist nicht akzeptabel - und kaum beabsichtigt.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Der offizielle Weg wäre ein Microsoft Support Case
>>>>>>>>>>>>>>>>>>>>>>>>> bzw. ein Connect Feedback.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Auf Connect finden sich einige:
>>>>>>>>>>>>>>>>>>>>>>>>> <URL:http://www.google.de/search?q=sqlceme35+site%3Aconnect.microsoft.com>
>>>>>>>>>>>>>>>>>>>>>>>>> Die beziehen sich, so weit ich sehen kann, auf den ursprünglich fehlenden
>>>>>>>>>>>>>>>>>>>>>>>>> X64 Support, was mit SQL Server Compact 3.5 SP1 behoben sein sollte,
>>>>>>>>>>>>>>>>>>>>>>>>> da dort nativer 64-Bit Support vorhanden ist:
>>>>>>>>>>>>>>>>>>>>>>>>> <URL:http://support.microsoft.com/kb/955965>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Zunächst solltest Du also prüfen, ob das Service Pack 1 installiert ist,
>>>>>>>>>>>>>>>>>>>>>>>>> wenn Du es nicht bereits getan hast.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Ändert das nichts, und Du arbeitest unter x64, solltest Du mal,
>>>>>>>>>>>>>>>>>>>>>>>>> wie den Connect Feedbacks zu entnehmen auf x86 wechseln.
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Bugs sind nun mal gemein und halten sich nicht an Regeln,
>>>>>>>>>>>>>>>>>>>>>>>>> oder wann sie einen zwicken ;-))
>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>> Gruß Elmar



Lupus Goebel

unread,
Oct 18, 2011, 6:42:56 PM10/18/11
to
Tach,

hier wurde schon vor Monaten das Licht ausgemacht.

Microsoft schließt etliche Newsgroups zugunsten von Foren.
Siehe auch:
<http://www.microsoft.com/germany/community/news/newsgroup_nntp_microsoft-foren.mspx>

Alternative: <http://www.aspnetzone.de/> oder auch evtl.
<http://schneegans.de/usenet/microsoft-umzug/>

Am 05.10.2011 15:18 schrieb Maro Maro:
> Hi Merwed,
>
[.....]

--
MfG - Lupus Goebel
Der Sumpf- Morasthobbybastler und Anfaenger mit
Wissensdurst (http://www.lupusdw.de http://foto.lupusdw.de)
Urlaub macht man in Irland: http://www.eaglesnest-bb.com/
0 new messages