Autor Beitrag
BlackMatrix
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Di 05.07.11 19:48 
Hi.

Ich habe eine Winform, wo ein DGV drauf ist. Nun kann der Benutzer darin URL + Benutzername + Kennwort eingeben.

Nun habe ich das Problem, dass wenn mein Benutzer in die URL "123" eingibt und das Programm schließt (wodurch die XML geschrieben wird), dass das XMLDokument beim nächsten Start nicht gelesen werden kann, weil "123" nicht vom Typ Uri ist. Wie löse ich das denn am effizentesten?

Mein Code:

ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
        DataSet DataSet { get; set; }

        const string _xmlPath = "data.xml";

        public MainForm()
        {
            DataSet = new DataSet();
            InitializeComponent();

            if (File.Exists(_xmlPath))
                DataSet.ReadXml(_xmlPath);
            else
                CreateTable();

            dataGridView1.DataSource = DataSet.Tables["data"];

        }

        private void CreateTable()
        {
            DataTable dataTable = new DataTable("data");
            dataTable.Columns.Add("url"typeof(Uri));
            dataTable.Columns.Add("username"typeof(string));
            dataTable.Columns.Add("password"typeof(string));

            DataSet.Tables.Add(dataTable);
        }

        private void MainFormClosing(object sender, FormClosingEventArgs e)
        {            
            DataSet.WriteXml(_xmlPath,XmlWriteMode.WriteSchema);
        }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4806
Erhaltene Danke: 1061

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 05.07.11 20:00 
Hallo BlackMatrix,

dann fange die entsprechende Exception mittels "try ... catch".

Und daher wäre es u.U. besser das Lesen der XML-Datei erst im Load-Event der Form zu machen (anstatt im Konstruktor).
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4708
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Di 05.07.11 20:09 
Wenn du schon explizit sagst das die Spalte eine Uri ist solltest du das auch prüfen.
Die Uri Klasse hat dazu zum Beispiel eine IsWellFormedOriginalString() bzw. IsWellFormedUriString() Methode.
BlackMatrix Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 243
Erhaltene Danke: 1



BeitragVerfasst: Di 05.07.11 20:51 
user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
Und daher wäre es u.U. besser das Lesen der XML-Datei erst im Load-Event der Form zu machen (anstatt im Konstruktor).

Freut mich, dass du mir auch Anregungen zur Verbesserung meines Codes gibst :zustimm:

user profile iconTh69 hat folgendes geschrieben Zum zitierten Posting springen:
dann fange die entsprechende Exception mittels "try ... catch".


Ich denke, da ist es zu spät, denn im Prinzip, soll ja in dieser XML Datei kein fehlerhafter Uri gespeichert werden. Demnach müsste ich beim Speichern schauen, ob da nicht fälschlicherweise falsche Uris eingetragen wurden.

user profile iconRalf Jansen hat folgendes geschrieben Zum zitierten Posting springen:
Wenn du schon explizit sagst das die Spalte eine Uri ist solltest du das auch prüfen.
Die Uri Klasse hat dazu zum Beispiel eine IsWellFormedOriginalString() bzw. IsWellFormedUriString() Methode.


Müsste ich demnach erst alle Element der DataTable durchlaufen und jeder URL prüfen. Hmm, hört sich so an, als ist es besser die URL lieber als string in der DataTable zu hinterlegen und dann an anderer Stelle zu prüfen, ob das überhaupt eine gültige Uri ist.

MfG BlackMatrix