C # -database Die ConnectionString-Eigenschaft wurde nicht initialisiert

Ich versuche, Werte in meine database einzufügen und wann immer ich versuche, es hinzuzufügen, mein Programm stürzt einfach ab und gibt mir einen Fehler, dass die ConnectionString-Eigenschaft nicht initialisiert wurde, aber ich habe es richtig initialisiert. Hier ist mein Code:

private static string conStr = @"Data Source=(LocalDB)\v11.0;AttachDbFilename=c:\users\aldrin\documents\visual studio 2013\Projects\MidtermAssignment_Ramirez\MidtermAssignment_Ramirez\MasterFile.mdf;Integrated Security=True"; SqlConnection myCon = new SqlConnection(); private int studId, year, units; private string fName, lName, mName, course, payment; public void insertRecord() { myCon.Open(); SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon); insertInfo.CommandType = CommandType.StoredProcedure; insertInfo.Parameters.Add("@studId", SqlDbType.Int).Value = studId; insertInfo.Parameters.Add("@fName", SqlDbType.VarChar).Value = fName; insertInfo.Parameters.Add("@lName", SqlDbType.VarChar).Value = lName; insertInfo.Parameters.Add("@mName", SqlDbType.VarChar).Value = mName; insertInfo.ExecuteNonQuery(); myCon.Close(); myCon.Open(); SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; insertData.Parameters.Add("@studId", SqlDbType.Int).Value = studId; insertData.Parameters.Add("@course", SqlDbType.VarChar).Value = course; insertData.Parameters.Add("@year", SqlDbType.Int).Value = year; insertData.Parameters.Add("@units", SqlDbType.Int).Value = units; insertData.Parameters.Add("@payment", SqlDbType.VarChar).Value = payment; insertData.ExecuteNonQuery(); myCon.Close(); } 

Hier ist der Code in meinem Button:

 myData.StudId = Convert.ToInt32(txtStudId.Text); myData.FName = txtFName.Text; myData.LName = txtLName.Text; myData.MName = txtMName.Text; myData.Course = cboCourse.SelectedItem.ToString(); myData.Year = Convert.ToInt32(cboYear.SelectedItem.ToString()); myData.Units = Convert.ToInt32(txtUnits.Text); myData.Payment = cboPayment.SelectedItem.ToString(); myData.insertRecord(); 

und hier sind meine gespeicherten Prozeduren:

 CREATE PROCEDURE [dbo].spInsertStudentData @studId int, @course varchar(50), @year int, @units int, @payment varchar(50) AS INSERT INTO StudentData VALUES (@studId, @course, @year, @units, @payment) RETURN 0 CREATE PROCEDURE [dbo].spInsertStudentInformation @studId int, @fName varchar(50), @lName varchar(50), @mName varchar(50) AS INSERT INTO StudentInformation VALUES (@studId, @fName, @lName, @mName) RETURN 0 

Ich studiere databaseen vor kurzem in ASP.NET und das ist, was ich tue, aber ich weiß nicht, warum dies nicht gut läuft in C #.

Die Fehlermeldung ist klar. Ein SqlConnection-object benötigt einen Verbindungsstring, bevor er versucht, die Verbindung zu öffnen. Wenn du also die Verbindung baustest, passierst du die Connectionstring oder stelle die ConnectionString-Eigenschaft vor dem Öffnen ein.

Aber ich schlage vor, dass Sie anfangen, lokale Verbindungsvariablen anstelle von globalen zu verwenden. Und behalte diese Erklärung in einer Gebrauchserklärung

 private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } { private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } { private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } .... private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } .... private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } } private static string conStr = @"....."; public void insertRecord() { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = new SqlCommand("spInsertStudentInformation", myCon)) { myCon.Open(); insertInfo.CommandType = CommandType.StoredProcedure; .... insertInfo.ExecuteNonQuery(); // No need to close the connection here.... SqlCommand insertData = new SqlCommand("spInsertStudentData", myCon); insertData.CommandType = CommandType.StoredProcedure; .... insertData.ExecuteNonQuery(); } } 

Die SqlConnection nutzt die Connection Pooling- Infrastruktur und ist daher besser, um lokale variables zu haben, die durch den Pool der Verbindung recycelt werden können, ohne eine wichtige Ressource für Ihr Programm zu sperren

Schließlich vermeidet die Gebrauchsanweisung gefährliche memorylecks, die die Einwegobjekte wie die Verbindung und den Befehl auch im Falle von exceptionn schließen und entsorgen

Sie müssen die Verbindungszeichenfolge angeben, die Sie in Ihrer ersten Zeile zu Ihrem Verbindungskonstruktor erstellt haben:

 SqlConnection myCon = new SqlConnection(conStr); 

Fehlermeldung ist so klar;

Die Connectionstring-Eigenschaft wurde nicht initialisiert

Sie können die ConnectionString Eigenschaft auf conStr as setzen.

 myCon.ConnectionString = conStr; 

oder Sie können es auf dem Konstruktor als Parameter als angeben;

 SqlConnection myCon = new SqlConnection(conStr); 

Wie Steve sagte: memoryn Sie Ihre SqlConnection als globale Variable ist keine gute Idee. Verwenden Sie dazu lokale variables und verwenden Sie using statement , um Ihre Verbindungen und Befehle zu entsorgen.

 using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = myCon.CreateCommand()) { ... } { using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = myCon.CreateCommand()) { ... } ... using(SqlConnection myCon = new SqlConnection(conStr)) using(SqlCommand insertInfo = myCon.CreateCommand()) { ... }