C# Connet fehler

Horst1945

Cadet 4th Year
Registriert
Okt. 2014
Beiträge
106
Hallo,

ich bekomme den Connet zu meiner SQL Datenbank nicht!

Code:
private void btnConnect_Click(object sender, EventArgs e)
        {
            try
            {
                
                
                    string ServerName = cmbDataSource.Text;
                
                    connectString = "Data Source = " + ServerName + "; Database=faktura;Integrated security=yes";
                    con = new SqlConnection(connectString);
                    con.Open();
                    sql = "EXEC sp_databases";
                    commad = new SqlCommand(sql, con);
                    reader = commad.ExecuteReader();
                    cmbDatabase.Items.Clear();
                    while (reader.Read())
                    {
                        cmbDatabase.Items.Add(reader[0].ToString());
                    }
                    
                
                
                
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);

            }
        }

Der Fehler:

Connect-Fehler.jpg

Ich benutze den ´.\SQLSERVER.
Über die Combobox wähle ich den entsprechenden Server aus
 
Zuletzt bearbeitet:
Frage zuerst mal das Ergebnis beim Verbinden ab: if ( con.Open() ) else ( ) und lass dir mal den ConnectionString ausgeben, z.B. per MsgBox... Debuggen ist halt das A und O. Spontan würde ich sagen, dass da ein paar Slashes fehlen. Ist aber ne Weile her, dass ich mit C# und SQL rumgemurkst habe.

[EDIT]
Hier wäre der Teil "Connection to a SQL Server instance" oder "Trusted Connection from a CE device" interessant für dich:
h**ps://www.connectionstrings.com/sql-server/
 
Zuletzt bearbeitet:
Ein bisschen wenig Informationen?

Ich geh mal davon aus, dass es sich um eine Lokale Serverinstanz zu MSSQL Express handelt. Nur welche Version ^^...

Ein Beispiel:

Code:
Local
connectString.DataSource = ".\\NAMESERVERINSTANZ";
connectString.AttachDBFilename = "C:\\Program Files (x86)\\Microsoft SQL Server\\MSSQL10_50.NAMESERVERINSTANZ\\MSSQL\\DATA\\DEINEDB.mdf";
connectString.InitialCatalog = "DEINEDB";
connectString.IntegratedSecurity = true;
 
connectString = "Data Source = .\\SQLEXPESS; Database=faktura;Integrated security=yes"

SQL Server 2012

SQL_Server_2012.jpg

Der Fehler muss hier liegen:

connectString = "Data Source = " + ServerName + "; Database=faktura;Integrated security=yes";
 
Zuletzt bearbeitet:
Der Fehler liegt definitiv beim Connection String. Schau doch mal in meinen Link, den ich dir in meinem ersten Post gegeben habe. Hier erhältst du diverse Beispiele zum Verbinden lokaler und im Netz verfügbarer Instanzen.

Das Listing von oiisamiio sieht ganz gut aus. Er benutzt auch nicht den Parameter "Database", sondern "Initial Catalog" und er gibt weiterhin den Pfad zur MDF-File an.

Ich kann dir nur empfehlen, mal meinem Link zu folgen. Hier nochmal:
h**p://www.connectionstrings.com/sql-server/

** durch tt ersetzen. Der Computerbase Spam-Schutz lässt mich den Link sonst nicht einsetzen.
 
Zuletzt bearbeitet:
Abgesehen von deiner eigentlichen Frage möchte ich dir einen Tipp geben. SqlConnection und SqlCommand sind beides Klassen die die IDisposable Schnittstelle implementieren. Diese sollten nach Verwendung immer wieder frei gegeben werden. Das bedeutet, dass du nachdem du z.B. deine SqlCommand nicht mehr brauchst, command.Dispose() aufrufen solltest. Das bringt die GarbageCollection dazu ein wenig aufzuräumen.

Alternativ bietet sich unter C# die Möglichkeit die using-Direktive zu benutzen. Das würde dann in deinem Fall so aussehen:
Code:
            string ServerName = cmbDataSource.Text;
            string connectString = "Data Source = " + ServerName + "; Database=faktura;Integrated security=yes";
            string sql = "EXEC sp_databases";
            

            using(SqlConnection con = new SqlConnection(connectionString))
            {
                using(SqlCommand command = new SqlCommand(sql,con))
                {
                    con.Open();
                    reader = commad.ExecuteReader();
                    cmbDatabase.Items.Clear();
                    while (reader.Read())
                    {
                        cmbDatabase.Items.Add(reader[0].ToString());
                    }
                }
            }


Das würde bewirken, dass automatisch aufgeräumt wird wenn deine SqlCommand und SqlConnection nicht mehr gebraucht werden und es sieht besser aus, imo. Außerdem hast du vergessen deine Connection mit con.Close() wieder zu schließen.

Gruß
 
Zuletzt bearbeitet:
@IKäsebrot
Wenn er das using benutzt braucht er KEIN db.Close().
Das "using" erledigt alles.

@Horst
Sonst ist der Code von IKäsebrot fgar nicht schlecht, aber wenn du die SQL Express Edition nimmst,
solltest du statt SqlConnection, SqlCeConnection verwenden und statt SqlCommand, solltest du SqlCeCommand verwenden.

So müsste der Code funktionieren.

PS: Erst mal die DatenbankConnection testen ohne Code.


Edit: SqlCeConnection und SqlCeCommand sind doch nicht mehr aktuell (war bis SQL Express 2010 so).

und Connectionstring sollte so aussehen:
"Data Source=[dein-PC-name]\\SQLEXPRESS;Initial Catalog=[Datenbankname];User ID=[UserName];Password=[Password]"

(Eckige Klammern [] natürlich weglassen ;))
 
Zuletzt bearbeitet:
Guten Abend,

ich habe das Problem Connect gelöst, denn es klappt jetzt einwandfrei!

Nochmals ein schönen Dank an den Usern.

@J4ckson - es klappt auch mit SqlConnection!!!

Horst
 
Zurück
Oben