Autor Beitrag
Leonadi
Hält's aus hier
Beiträge: 4



BeitragVerfasst: Sa 23.07.11 19:57 
Hallo,
ich würde gerne in C# 2 Strings miteinander verbinden. Der eine String ist fest, der andere wird durch eine TextBox (textBox1) eingegeben. Doch es möchte nicht. Ich trage den Wert in die Textbox ein, doch als Ergebnis wird nichts dem String hinzugefügt. Kann mir jemand helfen?

Hier ist der entsprechende Code:
ausblenden C#-Quelltext
1:
2:
String output = "SELECT A_PREIS FROM Artikel WHERE A_NAME=" + textBox1.Text;
MessageBox.Show(output);



Vielen Dank für die Hilfe
Leonadi


Entwicklungsumgebung: Microsoft Visual Studio 2008
Version (.NET): 3.5
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: Sa 23.07.11 20:25 
Das ist seltsam. Greifst du auf die richtige Textbox zu? Hast du vielleicht eine lokale Variable textBox1, die die Eigenschaft, die die richtige TextBox enthält, überlagert? Poste am besten mal etwas mehr Quellcode, z.B. die ganze Methode oder auch die Klasse.
papa69
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 79
Erhaltene Danke: 23

Win 10, Ubuntu
C#, Java, C
BeitragVerfasst: So 24.07.11 13:35 
hi,

ich nehme an, dass du deinen textBox1-String noch nicht "bekannt gemacht" hast --> die Textbox also "offiziell" leer ist.

Dazu brauchst du einen KeyDownEvent (wenn du deine Eingabe z.B mit Enter abschließt)

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
private void textBox1_KeyDown(object sender, KeyEventArgs e)
        {
            if (e.KeyCode == Keys.Enter)
            {
                String output = "..." + textBox1.Text;
                textBox1.Text = "";  //um die Textbox wieder "leer" zu haben
    ...
    

            }
        }
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4798
Erhaltene Danke: 1059

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: So 24.07.11 14:07 
Hallo papa69,

nein, das stimmt so nicht. Mittels textBox.Text kommt man jederzeit an den aktuell eingetippten Text, egal in welcher Methode oder Ereignis.

Leonadi, ich tippe so wie Yogu auch darauf, daß du irgendwie auf die falsche TextBox zugreifst.
Am besten, du arbeitest mal mit dem Debugger deinen Code durch oder aber du postest etwas mehr Code (in welcher Methode oder Ereignis verwendest du denn deinen obigen Code?).
Leonadi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 24.07.11 15:45 
Hallo,
hier ist noch mehr Code:
ausblenden 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:
OleDbConnection con = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0; Data Source=C:\test.mdb");
String Ausgabe;

        private void button1_Click(object sender, EventArgs e)
        {

            InitializeComponent();
            con.Open();
            String textSQL = "SELECT A_NAME FROM Artikel WHERE A_NR=" + textBox1.Text;

            OleDbCommand cmd = new OleDbCommand(textSQL, con);
            OleDbDataReader dr = cmd.ExecuteReader();


            while (dr.Read())
            {
                Ausgabe = dr[0].ToString(); // Ausgabe der Werte, die in Spalte 0 stehen (untereinander)
                //MessageBox.Show(dr[0].ToString());

            }



            label4.Text = Ausgabe;
            MessageBox.Show(Ausgabe);
            this.Refresh();
            dr.Close();
            con.Close();
        }


Die Textbox (textBox1) wird irgendwie nicht aktualisiert. Wenn ich in die Eigenschaften von textBox1 gehe und dort z.B "11" eintrage, funktioniert es. Es kommt mir sowieso etwas komisch vor... Denn ich habe bemerkt, dass ich auch nichts in Textboxen ausgeben kann. Also mit:
ausblenden C#-Quelltext
1:
textBox3.Text=Ausgabe;					

Bei MessageBoxen und Labels wird aber ein String normal ausgegeben. Ich glaube also es liegt an der Textbox, bzw. dem Updaten der Form.

Kann es vielleicht daran liegen, dass ich das Programm gezwungen habe als "x86" ausgeführt zu werden? Laut diversen Foren sollte ich das machen um auf die Accessdatenbank zuzugreifen...


Hoffe auf Hilfe
Leonadi

----------------------------
Betriebssystem: Windows 7 Professional
Systemtyp: 64Bit
Yogu
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 2598
Erhaltene Danke: 156

Ubuntu 13.04, Win 7
C# (VS 2013)
BeitragVerfasst: So 24.07.11 16:27 
user profile iconLeonadi hat folgendes geschrieben Zum zitierten Posting springen:
Wenn ich in die Eigenschaften von textBox1 gehe und dort z.B "11" eintrage, funktioniert es.

Wird dieser Text dann während der Laufzeit auch in der TextBox angezeigt, in die du normalerweise etwas eintippst?

user profile iconLeonadi hat folgendes geschrieben Zum zitierten Posting springen:
Kann es vielleicht daran liegen, dass ich das Programm gezwungen habe als "x86" ausgeführt zu werden?

Das wäre aber sehr seltsam und ein schwerer Bug von Seiten Microsoft.

Du verwendest auch nicht mehrere Fenster derselben Klasse?

Für diesen Beitrag haben gedankt: Leonadi
Leonadi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 24.07.11 18:02 
Zitat:
Wird dieser Text dann während der Laufzeit auch in der TextBox angezeigt, in die du normalerweise etwas eintippst?

Ja, alle Werte die ich VOR der Laufzeit eingebe werden während der Laufzeit angezeigt.

Zitat:

Du verwendest auch nicht mehrere Fenster derselben Klasse?

Ich habe in meinem Projekt nur ein Fenster...

Aber ich denke es liegt am Zeichnen der Form. Denn Wenn ich in das Label VOR der Laufzeit einen Wert eintrage, wir der Text den ich WÄHREND der Laufzeit eintrage hinter dem Text vor der Laufzeit angezeigt. Ungefähr so von der Seite:

ausblenden Quelltext
1:
2:
3:
4:
----------------------------------- Benutzer

>>>>>>                              Text der VOR der Laufzeit angegeben wurde
WWWWWWWWWWWWWWWWWWWWWWWWWWWW        Text der WÄHREND der Laufzeit angegeben wurde


Das gilt aber nur für Labels. Textboxen bleiben bei Laufzeitänderungen unverändert.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 24.07.11 18:51 
Wirklich sehr merkwürdig.
Kannst Du nicht mal Dein Projekt hier hochladen? Denn da ist irgendwo ein Fehler drin.
Anders kann ich es mir nicht erklären.
Leonadi Threadstarter
Hält's aus hier
Beiträge: 4



BeitragVerfasst: So 24.07.11 19:16 
Hallo,
also hier das hochgeladene Projekt. Es fragt Werte in einer Accessdatenbank ab... Ist nicht fertig, da ich ja sehr früh auf den Fehler gestoßen bin. Es war für einen "Sportverein" zur Mitgliederverwaltung gedacht. Dass ich die Datenbank nicht rausgeben kann ist glaube ich damit klar...

Hier habe ich aber eine "Beispieldatenbank" erstellt. Sie ist direkt auf die C:/ Platte zu Kopieren. Wenn der Wert 11 richtig eingelesen ist kommt als ergebnis 11 raus. (Wer will kann auch andere Nummern raussuchen, einfach die Datenbank in Excel aufrufen).

Das Passwort für die Projektdateien ist "forumshilfe". Die Datenbank ist nicht passwortgeschützt.


Leonadi

Projekt (zip, 42.62 KB)
Testdatenbank (zip, 12.12 KB)
Einloggen, um Attachments anzusehen!
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 24.07.11 20:41 
Hi,
also das InitializeComponent(); in dem "button1_Click"-Handler ist zu viel.
Nehme den mal raus, und dann bekommst Du das Ergebnis, das Du erwartest.
Trashkid2000
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 561
Erhaltene Danke: 137



BeitragVerfasst: So 24.07.11 21:03 
Nachtrag:
Das Konkatinieren der Strings im Sql-Statement ist nicht schön bzw. unsicher. Benutze stattdessen Parameter:
ausblenden C#-Quelltext
1:
2:
3:
String textSQL = "SELECT A_NAME FROM Artikel WHERE A_NR=@anumber";
OleDbCommand cmd = new OleDbCommand(textSQL, con);
cmd.Parameters.AddWithValue("@anumber", textBox1.Text);

LG,

Für diesen Beitrag haben gedankt: Leonadi