2017-03-05 3 views
0

Ich versuche, Daten aus Webformular in Visual Studio 2015 (Community Edition) zu speichern. Ich bekomme immer wieder Fehler:Get Fehler bei com.ExecuteNonQuery() beim Hinzufügen von Daten in Tabelle

Ich habe verschiedene Lösungen in diesem Forum erwähnt, aber keiner von ihnen funktioniert für mich. Bitte helfen Sie. Vielen Dank.

Fehlermeldung:

Mein Code

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (IsPostBack) 
     { 
      SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
      conn.Open(); 
      string checkuser = "select count(*) from [Table] where Username='" + un.Text + "'"; 
      SqlCommand com = new SqlCommand(checkuser, conn); 
      temp = Convert.ToInt32(com.ExecuteScalar().ToString()); 
      if (temp == 1) 
      { 
       Response.Write("User already exists"); 
      } 

      conn.Close(); 
     } 
    } 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (temp == 0) 
     { 
      try 
      { 
       SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
       conn.Open(); 
       string insertquery = "insert into [Table] (Designation, Username, Email, [Password]) values (@Designation, @Username, @Email, @Password)"; 
       SqlCommand com = new SqlCommand(insertquery, conn); 
       com.Parameters.AddWithValue("@Designation", dn.SelectedItem.ToString()); 
       com.Parameters.AddWithValue("@Username", un.Text); 
       com.Parameters.AddWithValue("@Email", em.Text); 
       com.Parameters.AddWithValue("@Password", pw.Text); 
       com.ExecuteNonQuery(); 
       Response.Redirect("Managers.aspx"); 
       Response.Write("Registration Successful"); 
       conn.Close(); 
      } 
      catch (Exception ex) 
      { 
       Response.Write("error :" + ex.ToString()); 
      } 
     } 
    } 
} 

Antwort

0

Wie oben Fehler scheint es wegen Objekt Typcasting ungültig ist.

Der Hauptunterschied ist die implizite Konvertierung bei Verwendung von AddWithValue. Wenn Sie wissen, dass Ihre ausführende SQL-Abfrage (gespeicherte Prozedur) einen Wert vom Typ int, nvarchar usw. akzeptiert, gibt es keinen Grund, sie in Ihrem Code erneut zu deklarieren.

Für komplexe Szenarien (Beispiel wäre DateTime, float), werde ich wahrscheinlich Add verwenden, da es expliziter ist, aber AddWithValue für einfachere Szenarien (Int zu Int).

protected void Button1_Click(object sender, EventArgs e) { 
    if (temp == 0) { 
    try { 
     SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["RegistrationConnectionString"].ConnectionString); 
     conn.Open(); 

     string insertquery = "insert into [Table] (Designation, Username, Email, [Password]) values (@Designation, @Username, @Email, @Password)"; 

     SqlCommand com = new SqlCommand(insertquery, conn); 

     com.Parameters.Add("@Designation", SqlDbType.VarChar).Value = dn.SelectedItem.ToString(); 
     com.Parameters.Add("@Username", SqlDbType.VarChar).Value = un.Text; 
     com.Parameters.Add("@Email", SqlDbType.VarChar).Value = em.Text; 
     com.Parameters.Add("@Password", SqlDbType.VarChar).Value = pw.Text; 
     com.ExecuteNonQuery(); 
     Response.Redirect("Managers.aspx"); 
     Response.Write("Registration Successful"); 
     conn.Close(); 
    } catch (Exception ex) { 
     Response.Write("error :" + ex.ToString()); 
    } 
    } 
    } 
+0

danke, das hat für mich funktioniert. –

+0

Sie begrüßen :) .. –

1

Ihr Fehler scheint in dieser Linie zu sein:

com.Parameters.AddWithValue("@Designation", dn.SelectedItem.ToString()); 

Das, was Datentyp zu bestimmen AddWithValue eine Zuordnung tun ist das Objekt dass du an die Methode übergibst. Das scheitert.

Try this:

1) com.Parameters.Add("@Designation", SqlDbType.VarChar).Value = dn.SelectedItem.ToString();

2) Wenn Sie halten mit AddWithValue debug, um zu sehen, was drin ist dn.SelectedItem.ToString()

Auf jeden Fall ist es immer vorzuziehen Add zu verwenden, anstatt AddWithValue weil von diesen typischen Problemen wie die, die du gerade hast. Werfen Sie einen Blick auf diesen Artikel: http://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

Verwandte Themen