Klasse DataSet / DataSet-Klasse

Recht jetzt ich versuche eine Datenbank zu erstellen handler, Griffe Datenbanken dynamisch. Sagen wir ich habe eine Klasse von fieldtypes "String, int, bool, String" und aktivieren möchten, die diese Klasse in einer Tabelle und alle fieldtypes in "Feldern" von einem dataset?

Wie kann ich das tun?

Außerdem kann ich ein paar Klassen erbt: "- System.Daten.DataSet" System".Daten.DataTable", "System.Daten.DataRow", und irgendeine Art von Adapter zu umgehen.

Ich weiß, wenn Sie gehen in den design-Modus und erstellen Sie einen Datensatz, der code ist wirklich schwer zu erkennen, wenn Sie es anschauen. Aber sollte es nicht möglich sein, von diesen Objekten und das erstellen von Klassen, mit Ihnen umgehen zu können "erstellen" Datenbank dynamisch. Es würde nicht mehr zu einem "Designer-Sicht" aber, Datenbank.AddTable(neue Tabelle("Feld1", "Feld2, "Feld3")) sollte das gleiche tun wie Sie grafisch im Designer-Modus.

Irgendwelche Ideen?

Die Grundidee ist, dass es flexibel ist und ich nehmen kann was auch immer Klasse und es in einer Tabelle mit Zeilen, die mit jedem Objekt von dieser Klasse " Feld-Werte, wie die Datenbank-Felder.

UPDATE

Dies ist nur eine einfache Klasse, die ich in der letzten Stunde, denke ich, der richtige Weg? Noch brauchen, um in der Lage sein zu DataSet hinzufügen die *.mdf /*.sdf-Datei, wie mache ich das?

public class DataAccess
{

    SqlConnection connection;
    DataSet dataSet;

    public DataAccess(String databaseName, String connectionStr)
    {
        dataSet = new DataSet(databaseName);
        connection = new SqlConnection(connectionStr);
    }

    public void AddTable<T>(String tableName)
    {
        dataSet.Tables.Add(new DBTable<T>(tableName));
    }

    public void AddRow<T>(String tableName, T row)
    {
        ((DBTable<T>)dataSet.Tables[tableName]).AddRow<T>(row);
    }

    public List<C> GetRows<T, C>(String tableName, String columnName)
    {
        return ((DBTable<T>)dataSet.Tables[tableName]).GetRow<C>(columnName);
    }

    public String GetXML()
    {
        return dataSet.GetXml();
    }

    #region METHOD PROPERTIES

    public int ColumnCount(String tableName)
    {
        for (int i = 0; i < dataSet.Tables.Count; i++)
        {
            if (dataSet.Tables[i].TableName == tableName)
            {
                return dataSet.Tables[i].Columns.Count;
            }
        }

        return 0;
    }

    #endregion


}

public class DBTable<T> : System.Data.DataTable
{
    public DBTable(String tableName) : base(tableName)
    {

        PropertyInfo[] properties = typeof(T).GetProperties();

        for (int i = 0; i < properties.Length; i++)
        {
            try
            {
                AddColumn(properties[i].Name, properties[i].PropertyType);
            }
            catch { }
        }

    }

    private void AddColumn(String name, Type t)
    {
        this.Columns.Add(new DataColumn(name, t, null, MappingType.Attribute));
    }

    public void AddRow<T>(T obj)
    {
        PropertyInfo[] properties = typeof(T).GetProperties();

        if (properties.Length == this.Columns.Count)
        {

            bool valid = true;

            for (int i = 0; i < properties.Length; i++)
            {
                if (properties[i].PropertyType != this.Columns[i].DataType)
                {
                    valid = false;
                }
            }

            if (valid)
            {
                object[] p = new object[this.Columns.Count];

                for (int i = 0; i < properties.Length; i++)
                {
                    p[i] = properties[i].GetValue(obj, null);
                }

                this.Rows.Add(p);
            }
        }
    }

    public List<T> GetRow<T>(String columnName)
    {

        List<T> objects = new List<T>();

        for (int i = 0; i < this.Rows.Count; i++)
        {
            objects.Add((T)this.Rows[i][this.Columns[columnName]]);
        }

        return objects;

    }
}
Viele Möglichkeiten, um die Haut dieser Katze. Was haben Sie versucht?
Ich habe nicht versucht, alles noch, aber ich denke, da alle Datenbank-Designer tut, ist erstellen Sie Klassen nach, was ich tun grafisch, das heißt, es sollte funktionieren, indem ein handler, der dies tut. Wenn ich eine Tabelle hinzufügen von Feldern und die Felder Einstellungen (PK, FK, NotNull, etc...) es hat zu arbeiten, nehmen Sie einen Klassen-Eigenschaften und die Eigenschaften, die Werte zu schaffen, eine "Tabelle", die alle Felder enthält die Klasse tut und so, das hinzufügen einer AddRow<T>(T-Klasse) sollte möglich sein. Bin ich falsch?
Einfach; etwas flexibel und wiederverwendbar. Dass ich mich bewegen kann um Projekte.
UPDATE ich habe meine code eingeben und versuchte es mit ein paar einfachen Klassen, es funktioniert und gibt gute Ergebnisse auf GetRow Methoden, und ich kann hinzufügen, eine neue Klasse, nimmt es Eigenschaften und liefert die richtigen sind, danach. Noch, was kann ich dagegen tun und wie kann ich speichern Sie den Datensatz an die Tabelle? Und wie verwalte ich TableAdapters?
...und vielleicht am wichtigsten, wie kann ich Werte, die auf den Feldern/Reihen wie "Unique/Primary Key/not null/Max-Länge", etc...

InformationsquelleAutor Deukalion | 2012-05-03

Schreibe einen Kommentar