Einzelnen Beitrag anzeigen

Robert_G
(Gast)

n/a Beiträge
 
#5

Re: Verbindung zu Firebird-DB

  Alt 18. Apr 2005, 13:35
Zitat von r_kerber:
Zitat von Lemmy:
ohne es selbst getestet zu haben: Der BDP hat den schlechten Ruf sehr fehleranfällig zu sein! Besser auf den Firebird .NET Provider wechseln...
Mag sein, aber BDP hat LiveDaten zur Designzeit und man benötigt einen Komponentensatz (Connection, DataAdapter, Command) um auf verschiedene DB's zugreifen zu können. Beim normalen .NET-Provider benötigt man für jede Datenbank einen anderen...
Sorry, aber das klingt wie ein Zitat von den KDTs. Und es ist eigentlich genauso falsch.
Der DBP bringt dir einen Monsterconnectionstring, in dem Infos angegeben werden müssen, die absolut unnötig sind.
Der BDP bringt dir die gleiche Funktionalität wie es die ADO.Net Interfaces bringen würden. (Wenn man mal diese DAU Funktionen á la AutoUpdate gönnerhaft ignoriert )

Wenn du in deinen Klassenbibliotheken ganz einfach NUR mit den ADO.Net Interfaces arbeitest, erreichst du das gleiche Ziel OHNE ein Borland.XXX in den Gac hauen zu müssen. Und OHNE stundenlang mit deinem Provider zu diskutieren, ob er dem BDP vertrauen will... (Dazu gab's hier schonmal 'nen Thread )

Du wirfst oben nur noch eine Typreferenz auf eine Sql-/Oracle-/Fb-/whatever- Connection rein.
Und schon kannst du davon eine Instanz anlegen (Du weißt ja, dass der Typ einen parameterlosen Constructor haben MUSS ).

Hier mal ein abstrakter Bleistift:
Code:
    internal class ConnectionDingsBums
    {
        public static IDbConnection GetConnectionInstance(Type connectionType)
        {
            if (typeof (IDbConnection).IsAssignableFrom(connectionType))
            {
                return connectionType.GetConstructor(Type.EmptyTypes).Invoke(null) as IDbConnection;
            } else
            {
                throw new ArgumentException("miep");
            }
        }
    }

    internal class Program
    {
        static void Main()
        {
            using (IDbConnection connection = ConnectionDingsBums.GetConnectionInstance(typeof (FbConnection)))
            {
                connection.ConnectionString = "miep";

                IDbCommand command = connection.CreateCommand();
                command.CommandText = "miep";

                IDataParameter parameter = command.CreateParameter();

                parameter.ParameterName = "miep";
                //DbType wird in der Instanz hinter dem
                //Interface zum richtigen Typen des Providers übersetzt
                // bei FB ist es VarChar...
                parameter.DbType = DbType.AnsiString;
                parameter.Value = "miep";
                command.Parameters.Add(parameter);

                IDataReader reader = command.ExecuteReader();

                while (reader.Read())
                {
                    Console.WriteLine(reader.GetString(0));
                }
            }
        }
    }

BTW: Was bringen dir Live Daten? Die Beispieldatensätze, die du bei den normalen Providern bekommst reichen doch eigentlich auch nzw. Ich habe gar keine Connection auf dem Form sondern binde höchstens IBindingList Implementierungen an irgendwelche Controls.

Ums es kurz zu fassen, ich persönlich finde einen Whatever-Provider 100-mal besser als so einen BDP mit einem 10MB Connectionstring.
Wenn man das System hinter ADO.Net verstanden hat, ist man auch nicht auf fixe Klassennamen angewiesen.
  Mit Zitat antworten Zitat