2017-10-24 4 views
2

Ich möchte den Weg herausfinden, um dieses Problem zu lösen. Was ich will ist: Wenn ich auf die Schaltfläche "Senden" klicke, wird der von mir eingegebene Wert an SQL Server übertragen.Fehler mit ExecuteNonQuery() erhalten. Verwenden von SQL Server und ASP.NET

Hier ist mein Code:

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data.SqlClient; 
    using System.Configuration; 

    namespace Comp 
    { 
     public partial class _Default : Page 
     { 
      SqlConnection con = new SqlConnection(@"Data Source=127.0.0.1;Initial Catalog=Comp;Persist Security Info=True;User ID=sa;Password=123"); 

      protected void SubmitButton_Click(object sender, EventArgs e) 
      { 
       con.Open(); 

       SqlCommand cmd = new SqlCommand("Insert into [Students] value(@id,@lname,@fname,@date)", con); 
       cmd.Parameters.AddWithValue("@id", idTextBox.Text); 
       cmd.Parameters.AddWithValue("@lname", lnTextBox.Text); 
       cmd.Parameters.AddWithValue("@fname", fnTextBox.Text); 
       cmd.Parameters.AddWithValue("@date", dateTextBox.Text); 

       cmd.ExecuteNonQuery(); 

       con.Close(); 
      } 
     } 
    } 

Und das Ergebnis ist hier:

Line 31: con.Open(); 
Line 32: SqlCommand cmd = new SqlCommand("Insert into [Students] value(@id,@lname,@fname,@date)", con); 
Line 33: cmd.Parameters.AddWithValue("@id", idTextBox.Text); // GET ERROR HERE 
Line 34: cmd.Parameters.AddWithValue("@lname", lnTextBox.Text); 
Line 35: cmd.Parameters.AddWithValue("@fname", fnTextBox.Text); 
+3

können Sie den Fehler posten? –

+3

Was ist der Fehler –

+0

Was ist ein Fehler? Kannst du Bilder zeigen –

Antwort

0

Diese Abfragesyntax kann möglicherweise falsch, wenn die Spaltennamen nicht in der richtigen Reihenfolge an den tatsächlichen Tabelle sind:

SqlCommand cmd = new SqlCommand("Insert into [Students] value(@id,@lname,@fname,@date)", con); 

Das richtige Standardsyntaxbeispiel sollte wie folgt aussehen:

SqlCommand cmd = new SqlCommand(@"Insert Into [Students] (ID, LName, FName, Date) 
            Values (@id, @lname, @fname, @date)", con); 

Wenn die id Spalte eine automatisch generierte Identität Primärschlüsselspalte ist, sollte es aus der Erklärung weggelassen werden:

SqlCommand cmd = new SqlCommand(@"Insert Into [Students] (LName, FName, Date) 
            Values (@lname, @fname, @date)", con); 

Last, wenn der Datentyp von id (und date) Spalte nicht definiert ist als string (und id Werte werden nicht automatisch generiert), Umwandlung Datentypen entsprechen, sind notwendig:

SqlCommand cmd = new SqlCommand(@"Insert Into [Students] (ID, LName, FName, Date) 
            Values (@id, @lname, @fname, @date)", con); 
cmd.Parameters.AddWithValue("@id", int.Parse(idTextBox.Text)); // convert to integer first if 'id' column is integer 
cmd.Parameters.AddWithValue("@lname", lnTextBox.Text); 
cmd.Parameters.AddWithValue("@fname", fnTextBox.Text); 
cmd.Parameters.AddWithValue("@date", DateTime.Parse(dateTextBox.Text)); // example conversion if 'date' is DateTime 

Oder Sie können 01 verwendenMethode und definieren geeignete SqlDbType data types wie zB unter:

SqlCommand cmd = new SqlCommand(@"Insert Into [Students] (ID, LName, FName, Date) 
            Values (@id, @lname, @fname, @date)", con); 
cmd.Parameters.Add("@id", SqlDbType.Int).Value = int.Parse(idTextBox.Text); // convert to integer first if 'id' column is integer 
cmd.Parameters.Add("@lname", SqlDbType.VarChar).Value = lnTextBox.Text; 
cmd.Parameters.Add("@fname", SqlDbType.VarChar).Value = fnTextBox.Text; 
cmd.Parameters.Add("@date", SqlDbType.DateTime).Value = DateTime.Parse(dateTextBox.Text); // example conversion if 'date' is DateTime 
+0

Danke! Für mich geht das!! Noch eine Frage: Im Moment habe ich eine Tabelle, um mir die Daten vom SQL-Server zu zeigen, also ist es möglich, mich oder den Benutzer auf die entsprechende Seite zu übertragen? Zum Beispiel: im Moment habe ich eine Liste von Namen, wenn ich auf Apfel in dieser Liste klicke, werde ich auf die Fruchtseite übertragen. Natürlich habe ich auf dem SQL-Server mehrere Tabellen, wie den Namen der Liste, Obsttabelle usw. – Ivan

0

Sie versuchen, String in ID Spalte aber ID Datentyp einzufügen ist int so diese Zeile ändern

cmd.Parameters.AddWithValue("@id", idTextBox.Text); 

in diese

cmd.Parameters.AddWithValue("@id", Convert.Int16(idTextBox.Text)); 

die Date Spaltendatentyp Date, und Sie müssen diese Zeile ändern

cmd.Parameters.AddWithValue("@date", dateTextBox.Text); 

in diesem

cmd.Parameters.AddWithValue("@date", Convert.ToDateTime(dateTextBox.Text)); 
Verwandte Themen