2017-11-15 2 views
0
SqlCommand cmd = new SqlCommand(); 
     SqlConnection con = new SqlConnection(); 
     string checkRadioButton() 
     { 
      string rbdText; 
      if(RadioButton1.Checked) 
      { 
       rbdText = RadioButton1.Text; 
      } 
      else 
      { 
       rbdText = RadioButton2.Text; 
      } 
      return rbdText; 
     } 



     protected void Button1_Click(object sender, EventArgs e) 
     { 
      SqlCommand cmd = new SqlCommand(" insert into Registration values(@Name, @Gender, @MobileNumber, @EmailID, @UserID, @Password, @Address, @Country)", con); 
      cmd.Parameters.AddWithValue("@Name", TextBox1.Text); 
      cmd.Parameters.AddWithValue("@Gender", checkRadioButton()); 
      cmd.Parameters.AddWithValue("@MobileNumber", TextBox2.Text); 
      cmd.Parameters.AddWithValue("@EmailID", TextBox3.Text); 
      cmd.Parameters.AddWithValue("@UserID", TextBox5.Text); 
      cmd.Parameters.AddWithValue("@Password", TextBox6.Text); 
      cmd.Parameters.AddWithValue("@Address", TextBox8.Text); 
      cmd.Parameters.AddWithValue("@Country", DropDownList1.SelectedItem.Value); 
      cmd.ExecuteNonQuery(); 
      con.Close(); 
      Response.Redirect("Homepage2.aspx"); 

     } 

Dies ist meine aspx.cs-Datei für die Registrierungsseite. Es gibt keinen Kompilierungsfehler, aber nachdem das Ereignis Button1_Click ausgeführt wurde, werden die Registrierungsdaten nicht in der Datenbank gespeichert.Einfügen in SQL DB funktioniert nicht

+2

Sie müssen SqlConnection-Konstruktor mit Conneciton String ändern. 'SqlConnection conn = new SqlConnection (" Datenquelle = SERVERNAME; Initial Catalog = DATABASENAME; Benutzer-ID = USERNAME; password = PASSWORD; ");' –

+0

Möglicherweise möchten Sie Ihr con-Objekt mit einer Verbindungszeichenfolge initialisieren und dann versuchen Codeblock} catch (Exception e) {}, um die Fehler, falls vorhanden, zu protokollieren –

Antwort

1

Sie müssten dem Konstruktor SQLConnection eine Verbindungszeichenfolge hinzufügen. Die connection string selbst ist üblich in der web.config zu halten. So könnte der Code ähnlich sein:

var connectionString = ConfigurationManager.ConnectionStrings["myConnectionString"].ConnectionString; 
using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    // Do your insert here; 
} 
0

Wie andere erwähnt haben, ist die Antwort auf Ihre Frage ist, dass Sie eine Verbindungszeichenfolge als Parameter für die Instanziierung Ihrer SqlConnection Objekt fehlen:

SqlConnection con = new SqlConnection("connection string goes here"); 

Allerdings gibt es ein paar andere Dinge, die ich Ihnen empfehlen würde, in Ihrem Code zu ändern.

Freigabe ordnungsgemäß von nicht verwalteten Ressourcen

Jede Klasse, die die Schnittstelle implementiert IDisposable muss fachgerecht entsorgt werden. Was das bedeutet, ruft die Dispose() Methode auf, oder die Instanziierung des Objekts in einem using Block (ich würde diese Route sehr empfehlen, wenn möglich, da es viel einfacher ist).

So zum Beispiel SqlConnection implementiert IDisposable, so würde ich das ändern:

SqlConnection con = new SqlConnection(); 

dazu: für SqlCommand auch

using (SqlConnection con = new SqlConnection()) 
{ 
    // ... 
} 

Sie müßten diese Änderungen vornehmen.

Verwendung von try...catch Blöcke für Code, werfen könnte Jeder Code Ausnahmen

, die in einem try...catch Block gewickelt werden, um eine Ausnahme auslösen könnten, sollten. Dadurch wird verhindert, dass Ihre Anwendung abstürzt, wenn eine Ausnahme ausgelöst wird. Ausnahmen können an Stellen ausgegeben werden, an denen Sie nicht erwarten würden, dass sie nichts mit Ihrem Code zu tun haben.

Nehmen Sie zum Beispiel SqlConnection. Wenn Ihre Netzwerkverbindung plötzlich nicht mehr funktioniert und Ihr Code SqlConnection.Open() aufruft, wird eine Ausnahme ausgelöst und Ihre Anwendung stürzt ab. Wenn Sie diese Zeile in einen try...catch Block schreiben, würde dies den Absturz der App verhindern und Ihnen erlauben, die Exception "elegant" zu behandeln (indem Sie den Fehler protokollieren und die Anwendung weiterhin ausführen, falls möglich).

using (var connection = new SqlConnection("Server=SQLServerName;Integrated Security=True;")) 
{ 
    try 
    { 
     connection.Open() 
    } 
    catch (Exception ex) 
    { 
     // Do something with the exception 
    } 
} 

Verschieben fest codierte SQL-Anweisungen zu Stored Procedures/Functions

Wenn Sie Ihre SQL-Anweisungen in Ihrem Quellcode direkt setzen (allgemein als „Hardcoding“), müssen Sie dann neu zu kompilieren und neu deploy Ihre gesamte Anwendung, wenn diese SQL-Anweisung in der Zukunft geändert werden muss.

Stattdessen können Sie SQL-Anweisungen in Stored Procedures oder Functions extrahieren und diese aus Ihrem Code aufrufen. Auf diese Weise müssen Sie die Anwendung nicht erneut kompilieren und erneut bereitstellen, wenn die SQL-Anweisung geändert werden muss. Aktualisieren Sie einfach die gespeicherte Prozedur/Funktion.

Es gibt ein paar weitere Teile Ihres Codes, die einfacher umstrukturiert werden könnten, aber dieser Beitrag ist schon viel größer als ich ursprünglich gedacht hatte, also werde ich hier aufhören.