Arhn - архитектура программирования

Не удается вставить данные в SQL Server 2014 с помощью Asp.net MVC4

Я совершенно новичок в .net, я пытался следовать следующему учебнику по ссылке.

https://www.youtube.com/watch?v=WLD6DvLI35Y&list=PLx7nFxMa-ZcIz2VBKC8FyMjQNmlIvrAi9

но, как и второе видео, не добавляя данные в базу данных. Я не могу найти ошибку. Я использую VS Express 2012, ASP.NET MVC4 и SQL Server 2014.

Вот мой код:

Индекс.cshtml

@model MyApp.Models.StudentModel

@{
ViewBag.Title = "Index";
}

<h2>Hi @ViewBag.message</h2>
@using (Html.BeginForm("SaveDataStudent", "Student", new { @id = "Form" },  FormMethod.Post))
{
@Html.ValidationSummary();
@Html.AntiForgeryToken();`

@Html.LabelFor(m=>m.productname)
@Html.TextAreaFor(m=>m.productname)
@Html.ValidationMessageFor(m => m.productname)

@Html.LabelFor(m=>m.quantity)
@Html.TextAreaFor(m=>m.quantity)
@Html.ValidationMessageFor(m => m.quantity)

@Html.LabelFor(m=>m.price)
@Html.TextAreaFor(m=>m.price)
@Html.ValidationMessageFor(m => m.price)

 <input type="submit" value ="Save" name ="Save" />

 }
 @section Scripts{
    @Scripts.Render("~/bundles/jqueryval")

}

СтудентКонтролер

using MyApp.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace MyApp.Controllers
{
    public class StudentController : Controller
    {
         // GET: /Student/
         protected CodeDB d = new CodeDB();

         public ActionResult Index()
         {
            return View();
         }

         [HttpPost]
         [ValidateAntiForgeryToken]
         public ActionResult SaveDataStudent(StudentModel f) 
         {
             if (ModelState.IsValid)
             {
                 d.Open();
                 int i = d.DataInsert("INSERT INTO tblproduct(productname,price,quantity)VALUES('" + f.productname + "','" + f.price + "','" + f.quantity + "')");

                 //here getting i=0
                 if (i > 0)
                 {
                      ModelState.AddModelError("Success", "Save Success");
                 }
                 else
                 {
                     ModelState.AddModelError("Error", "Save Error");
                 }

                 d.Close();
             }
             else 
             {
                 var errors = ModelState.Values.SelectMany(v => v.Errors);
             }

             return View("Index");
         }
     }
 }

CodeDB.cs

 using System;
 using System.Collections.Generic;
 using System.Data.SqlClient;
 using System.Linq;
 using System.Web;
 using System.Web.Configuration;`

 namespace MyApp.Models
 {
     public class CodeDB
     {
        protected SqlConnection con;`

        public bool Open(string Connection = "DefaultConnection")
        {
            con = new     SqlConnection(@WebConfigurationManager.ConnectionStrings[Connection].ToString());

            try
            {
                bool b = true;

                if (con.State.ToString() != "Open")
                {
                    con.Open();
                }

                return b;
             }
             catch (SqlException ex)
             {
                 return false;
             }
        }
        //end Open Connection 

        //close connection
        public bool Close()
        {
            try
            {
                con.Close();
                return true;
            }
            catch (Exception ex)
            {
                return false;
            }
        }

        public int ToInt(Object s)
        {
             try
             {
                 return Int32.Parse(s.ToString());
             }
             catch
             {
                 return 0;
             }
        }

        //Insert Data
        public int DataInsert(String sql)
        {
            int lastID = 0;
            String query = sql + ";SELECT@@Identity;";

            try
            {
               if (con.State.ToString() == "Open")
               {
                    SqlCommand cmd = new SqlCommand(query, con);
                    cmd.ExecuteNonQuery();
                    lastID = this.ToInt(cmd.ExecuteScalar());
                }

                return this.ToInt(lastID);
             }
             catch
             {
                return 0;
             }
          }
        }
     }
}

Студент.cs

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;`

namespace MyApp.Models
{
    public class StudentModel
    {
        [StringLength(5)]
        [Required]
        [Display(Name = "Name:")]
        public string productname { get; set; }`

        [StringLength(3,MinimumLength=2,ErrorMessage="Min 5 max 10")]
        [Required]
        [Display(Name = "Quantitys:")]
        public string quantity { get; set; }

        [Required(ErrorMessage = "Please enter price.")]
        public string price { get; set; }
    }
}

Web.config

<connectionStrings>
    <add name="DefaultConnection" 
         connectionString="Data Source=DESKTOP-VC6FUTV\SQLEXPRESS;Initial Catalog=MVC4;Persist Security Info=True;User ID=sa;Password=root" 
         providerName="System.Data.SqlClient" />
</connectionStrings>

введите здесь описание изображения

Где моя ошибка?

05.10.2016

Ответы:


1

Я не проверял это, но думаю, что вам нужен пробел между SELECT и @@Identity здесь: String query = sql + ";SELECT@@Identity;";

Я думаю, вы получаете 0 из блока catch внутри метода DataInsert.

Кроме того, вы выполняете запрос дважды; удалить cmd.ExecuteNonQuery();.

В качестве побочного замечания вы можете пересмотреть способ добавления ошибок в ModelState. Я бы удалил имя свойства из этого утверждения ModelState.AddModelError("Error", "Save Error");, так как «Ошибка» не является свойством вашей модели (поэтому сделайте его ModelState.AddModelError(string.Empty, "Save Error");). Вам потребуется сводка проверки в представлении для отображения ошибок, не связанных с свойствами (таких как «Ошибка сохранения»).

05.10.2016
Новые материалы

Коллекции публикаций по глубокому обучению
Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

Представляем: Pepita
Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

Советы по коду Laravel #2
1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

3 способа решить квадратное уравнение (3-й мой любимый) -
1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

Создание VR-миров с A-Frame
Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

Демистификация рекурсии
КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..