2016-08-20 9 views
2

Ich möchte, dass der Benutzer alle angezeigten Daten (die Spalten aus der Datenbank) eingibt, sie ausfüllt und einreicht. Ich kann nicht die Id und CompanyID bekommen, um entweder mit HTML.HiddenFor Element automatisch generiert zu bekommen.System.Data.SqlClient.SqlException: Spaltenname oder Anzahl der angegebenen Werte stimmt nicht mit der Tabellendefinition überein

System.Data.SqlClient.SqlException: Column name or number of supplied values does not match table definition..

Modell:

namespace Project.Models 
{ 
    public class Contact 
    { 
     public int Id { get; set; } 
     public string FirstName { get; set; } 
     public string LastName { get; set; } 
     public string Email { get; set; } 
     public int Phone { get; set; } 
     public int CompanyID { get; set; } 
    } 
} 

Ausblick:

@model Project.Contact 

<h2>Create Contact</h2> 

@using (Html.BeginForm("Create", "Home", FormMethod.Post)) 
{ 
    <table> 
     <tr> 
      <th>First name</th> 
      <th>Last name</th> 
      <th>Email</th> 
      <th>Phone</th> 
     </tr> 
     <tr> 
      <td>@Html.HiddenFor(m => m.Id)</td> 
      <td></td> 
      <td>@Html.TextBoxFor(m => m.FirstName)</td> 
      <td>@Html.TextBoxFor(m => m.LastName)</td> 
      <td>@Html.TextBoxFor(m => m.Email)</td> 
      <td>@Html.TextBoxFor(m => m.Phone)</td> 
      <td>@Html.HiddenFor(m => m.CompanyID)</td> 
     </tr> 

    </table> 
    <br /> 
    <input type="submit" name="btn" class="btn-primary" value="Create" /> 
} 

Controller:

using Arbetsprov_Sublime___Andre_Kordasti.Models; 
using System.Collections.Generic; 
using System.Data.SqlClient; 
using System.Web.Mvc; 

namespace Arbetsprov_Sublime___Andre_Kordasti.Controllers 
{ 
    public class HomeController : Controller 
    { 
     public ActionResult Index() 
     { 
      return View(); 
     } 

     [HttpGet] 
     public ActionResult Create() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Create(Contact model) 
     { 
      var connection = new SqlConnection(@"Data Source=.\SQLExpress;Initial Catalog=Sublime;Integrated Security=True"); 
      connection.Open(); 

      var command = new SqlCommand("INSERT INTO Contact Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection); 
      command.ExecuteNonQuery(); 

      return View(); 
     } 
    } 
} 
+0

"INSERT INTO Kontakt" sollte "Select * from Contact" sein –

+0

Ja, aber das hilft nicht, ich bekomme nur eine Liste meiner Kontakte. Ich möchte einen neuen Kontakt erstellen. – Malphai

+0

Sie nehmen derzeit Informationen aus Ihrer Datenbank und füllen sie in ein Objekt. Sie sollten entweder 1) Ihr Kontaktobjekt einem Entitätsframework zuordnen oder 2) einen "in Kontakt (Spaltennamen) values ​​()" Typ der Abfrage erstellen und diese Abfrage auslösen. –

Antwort

1
var command = new SqlCommand("INSERT INTO Contact(Id,FirstName,LastName,Email,Phone,CompanyId) Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection); 
command.ExecuteNonQuery(); 

, wenn es eine Spalte ist, dass Sie werden muss automatisch generiert haben zu sagen, die Werte, die Sie für welche Spalte geben, so dass sql dann weiß, dass die Attribute, die nicht erwähnt werden, automatisch sein sollten

+0

Ich denke, dass meine ID automatisch generiert wird, wie behebe ich das? – Malphai

+0

var Befehl = neu SqlCommand ("INSERT INTO Kontakt (Vorname, Nachname, E-Mail, Telefon, CompanyId) Werte (" '+ model.FirstName + "" + model.LastName + "', '" + model.Email + "" + model.Phone + "','" + model.CompanyID + "')", Verbindung); command.ExecuteNonQuery(); – Road2PreSchool

+0

Ich bekomme Fehler: "System.Data.SqlClient.SqlException: Es gibt mehr Spalten in der INSERT-Anweisung als Werte in der VALUES-Klausel angegeben.Die Anzahl der Werte in der VALUES-Klausel muss mit der Anzahl der in der INSERT-Anweisung angegebenen Spalten übereinstimmen. " – Malphai

0

Vielleicht ist Ihr Kontakt Tabelle "ID" Spalte Wert Repeater. ex: Strom-ID ist bereits

var command = new SqlCommand("INSERT INTO Contact (Id, FirstName, LastName, Email , Phone, CompanyID) Values('" + model.Id + "','" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection); 
command.ExecuteNonQuery(); 

oder (wenn Ihre Tabelle id-Spalte ist Autoinkrement dann)

var command = new SqlCommand("INSERT INTO Contact (FirstName, LastName, Email , Phone, CompanyID) Values('" + model.FirstName + " " + model.LastName + "','" + model.Email + " " + model.Phone + "','" + model.CompanyID + "')", connection); 
command.ExecuteNonQuery(); 
+0

Ich denke, dass meine ID automatisch generiert wird, wie kann ich das beheben? – Malphai

+0

Ich erhalte einen Fehler: "System.Data.SqlClient.SqlException: In der INSERT-Anweisung gibt es mehr Spalten als die in der VALUES-Klausel angegebenen Werte. Die Anzahl der Werte in der VALUES-Klausel muss mit der Anzahl der in der INSERT-Anweisung angegebenen Spalten übereinstimmen. " – Malphai

0

Versuchen Sie nicht, die ID zu senden

Und wenn es nicht funktioniert plz sag mir die Ausnahme geworfen ist es das gleiche oder ändert es sich.

Und die Abfrage, die Sie verwenden, die Sie mir in Ihrem Kommentar senden, hatte etwas Comass fehlt ','.

SO, wenn u sagen

INSERT INTO tbl(Column1,Column2,Column3) values ('value1''value2'+','value3') 

es wird u den gleichen Fehler geben, weil Sie 3 Spalten erwähnt, sondern gab nur zwei Werte. Ich hoffe, ich bin klar.

Verwandte Themen