2016-08-20 2 views
2

と一致しません。表示されたすべてのデータ(データベースの列)をユーザーが入力し、入力して送信します。 Id3とCompanyIDを取得してHTML.HiddenFor要素で自動生成することはできません。System.Data.SqlClient.SqlException:列名または指定された値の数がテーブル定義

​​

モデル:

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; } 
    } 
} 

ビュー:

@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" /> 
} 

コントローラー:

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

"連絡先から選択*"する必要があります –

+0

ええ、それは助けにはならない、私は私の連絡先のリストを取得します。私は新しい連絡先を作成したい。 – Malphai

+0

現在、データベースから情報を取得してオブジェクトに埋め込んでいます。 1)あなたの連絡先オブジェクトをエンティティフレームワークにマップするか、2)「問い合わせ(列名)values()」型のクエリを作成してそのクエリを実行する必要があります。 –

答えて

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(); 

(あなたのテーブルのidカラムは、自動インクリメントの場合)どの列に与えられている値なので、sqlは列挙されていない属性をautoGeneratedにする必要があることを認識します。

+0

私のIDは自動生成されると思いますが、どうすれば修正できますか? – Malphai

+0

varコマンド=新しいSqlCommand( "INSERT INTO(FirstName、LastName、Email、Phone、CompanyId)の値を入力します(" '+ model.FirstName + "" + model.LastName + "'、+" model.Email + "" + model.Phone + "'、" "+ model.CompanyID +"') "、接続); command.ExecuteNonQuery(); – Road2PreSchool

+0

エラーが発生しました: "System.Data.SqlClient.SqlException:INSERT文にVALUES句で指定された値より多くの列があります。VALUES句の値の数は、INSERT文で指定された列の数と一致する必要があります。 " – Malphai

0

たぶん、あなたの連絡先の表 "ID" 列値リピータ。例:現在のIDがすでに

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(); 

を持っているか、され、あなたが指示する必要が自動生成されなければなら列がある場合

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

私のIDは自動生成されていると思いますが、どうすれば修正できますか? – Malphai

+0

エラーが発生しました: "System.Data.SqlClient.SqlException:INSERT文にVALUES句で指定された値より多くの列があります。VALUES句の値の数は、INSERT文で指定された列の数と一致する必要があります。 " – Malphai

0

IDを送信しないでください

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(); 

そして、もしそれが働いていなければ、スローされた例外は同じかそれとも変わるのですか?

あなたがuのコメントで私を送っている使用しているクエリは、いくつかの昏睡がありませんでした '、'。

uは

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

を言うときあなたは3列を述べただけで2値が得られたので、SOそれは、U、同じエラーになります。私は明確であることを願っています。

関連する問題