2016-09-30 3 views
-5

Ich verwende diesen Code für Verbindungszeichenfolge:Warum funktioniert die SqlConnection mit Textbox nicht?

namespace TransInsert 
{ 
    public partial class Form1: Form 
    { 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    SqlConnection con = new SqlConnection(@"Data Source=" + textBox1.Text + ";Initial Catalog=database;user ID=sa;Password=xxxx"); 

    private void TextBox1.Text_SelectedIndexChanged(object sender, EventArgs e) 
    { 
    } 
    } 
} 

ich es unter IntializeCompoment platzieren und ich bekomme Fehler:

A field initializer cannot reference the non-static field, method, or property 'TransInsert.Form1.textBox1'

+0

wahrscheinlich Sie dies tun in Initializer oder in statischer Methode. Stellen Sie uns mehr von Ihrem Code zur Verfügung. – MikkaRin

+0

dies würde nicht dazu führen, dass –

+1

Youre dies an einem völlig falschen Ort für einen Start tun. Sie versuchen, einen Wert außerhalb einer beliebigen Methode oder eines Ereignisses zu übergeben, der ausgelöst werden könnte, um der Verbindungszeichenfolge einen Wert zu geben. –

Antwort

1

Sie können nicht Verbindungszeichenfolge Textfeld außerhalb des event.you festlegen kann, wie Verbindungszeichenfolge in form_load Ereignisse oder button_click Ereignisse verwenden, unter

using System.Data.SqlClient; 
    private void Form1_Load(object sender, EventArgs e) 
    { 

     SqlConnection con; 
     con = new SqlConnection(@"Data Source=" + textBox1.Text + ";Initial Catalog=DBName;user ID=sa;Password=yourpassword"); 
     con.Open(); 
    } 
+0

Also ich wurde meine SqlConnection an falscher Stelle laufen lassen, vielen Dank! – user6894907

+0

Froh, dass es geholfen hat. Bitte schön! :) –

5

Sie können keine Instanzvariable (con) mit einer anderen Instanz initialisieren Variable (textBox1).

In vielen Fällen ist es nicht einmal sinnvoll, eine Referenz auf eine Datenbankverbindung als Instanzvariable zu halten. Das Öffnen von Verbindungen ist günstig, da das Pooling von Verbindungen möglich ist. Sie können eines öffnen, wann immer Sie möchten, und es schließen, wenn Sie fertig sind, und Sie werden golden sein.

etwas tun, wenn Sie Daten aus Ihrer Datenbank ziehen müssen:

void Foo() 
{ 
    using (var conn = new SqlConnection("...")) 
    { 
     conn.Open(); 

     // then read about how to use ADO.NET 
    } 
} 

Lesen Sie außerdem über den using Block und warum es eine gute Idee.

Bonus-Chatter: Injektion auf Verbindungszeichenfolgen ist eine Sache, achten Sie darauf, Benutzereingabe zu überprüfen, anstatt es blendend in Ihre Verbindungszeichenfolge aufzunehmen.

+0

Ich möchte aus einer Combobox auswählen, welche Verbindung ich öffnen möchte – user6894907

+0

@ user6894907 dann möchten Sie sicherstellen, dass das Steuerelement nicht bearbeitet werden kann. –