Member 13004859 Ответов: 1

Sqlexception был необработан пользовательским кодом


В принципе, то, что я сделал, я добавляю userdata в таблицу базы данных и извлекаю данные из базы данных с помощью MVC. Я получил ошибку в действии метода получения данных из базы данных. Пожалуйста, поправьте меня, где мне на самом деле не хватает...!!!

Что я уже пробовал:

Контроллер:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Data.SqlClient;
using System.Web.Configuration;
using Insert_UserDetails.Models;
using System.Data;

namespace Insert_UserDetails.Controllers
{
    public class UserController : Controller
    {
        // GET data from stored procedure
        public ActionResult InsertUserDetails()
        {
            var objuserdetail = new UserDetails();
            using(SqlConnection con = new SqlConnection())
            {
                con.ConnectionString = WebConfigurationManager.ConnectionStrings["mycon"].ToString();
                var cmd = new SqlCommand("usercrudoperation", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@status", "GET");
                con.Open();
                var data_adapter = new SqlDataAdapter(cmd);
                var data_set = new DataSet();
                 data_adapter.Fill(data_set);   // got error 
                var userlist = new List<userdetails>();
                for(int i = 0; i< data_set.Tables[0].Rows.Count; i++)
                {
                    var objdetails = new UserDetails();
                    objdetails.userid = int.Parse(data_set.Tables[0].Rows[i]["userid"].ToString());
                    objdetails.username = data_set.Tables[0].Rows[i]["username"].ToString();
                    objdetails.education = data_set.Tables[0].Rows[i]["education"].ToString();
                    objdetails.location = data_set.Tables[0].Rows[i]["location"].ToString();
                    userlist.Add(objdetails);
                }
                objuserdetail.userinfo = userlist;
            }

            return View(objuserdetail);
        }

        //Insert data into stored procedure
        [HttpPost]
        public ActionResult InsertUserDetails(UserDetails user)
        {
            var objuserdetail = new UserDetails();
            using(SqlConnection con = new SqlConnection())
            {
                con.ConnectionString = WebConfigurationManager.ConnectionStrings["mycon"].ToString();
                var cmd =  new SqlCommand("usercrudoperation", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@username", user.userid);
                cmd.Parameters.AddWithValue("@education", user.education);
                cmd.Parameters.AddWithValue("@location", user.location);
                cmd.Parameters.AddWithValue("@Status", "Insert");
                con.Open();
                ViewData["result"] = cmd.ExecuteNonQuery();
            }
            return View();
        }
    }
}

Модель :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace Insert_UserDetails.Models
{
    public class UserDetails
    {
        // define all the fields of userdetail table
        public int userid { get; set; }
        public string username { get; set; }
        public string education { get; set; }
        public string location { get; set; }
        public List<userdetails> userinfo { get; set; }
    }
}

Смотреть:
<pre>@model Insert_UserDetails.Models.UserDetails

@{
    ViewBag.Title = "InsertUserDetails";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>InsertUserDetails</h2>
    <div>
        @using (Html.BeginForm("InsertUserDetails", "User", FormMethod.Post))
        {
            <table><tbody><tr><td>User Name :</td><td>@Html.TextBoxFor(u => u.username)</td></tr><tr><td>Education :</td><td>@Html.TextBoxFor(u => u.education)</td></tr><tr><td>Location :</td><td>@Html.TextBoxFor(u => u.location)</td></tr><tr><td> </td><td></td></tr></tbody></table>
        }
        <h4>User Details</h4>
        @if (Model != null)
        {
            if (Model.userinfo.Count > 0)
            {
                    @foreach (var item in Model.userinfo)
                    {
                        
                    }
                <table><tbody><tr><th>UserId</th><th>UserName</th><th>Education</th><th>Location</th></tr><tr><td>@Html.DisplayFor(modelitem => item.userid) </td><td>@Html.DisplayFor(modelitem => item.username)</td><td>@Html.DisplayFor(modelitem => item.education)</td><td>@Html.DisplayFor(modelitem => item.location)</td></tr></tbody></table>
            }
            else
            {
                No Details Found.
            }
        }
        
$(function () {
var msg = '@ViewData["result"]';
if (msg == '1')
{
alert("User Details Inserted Successfully");
window.location.href = "@Url.Action("InsertUserDetails", "User")";
}
});

хранимая процедура:
Create Procedure usercrudoperation
(
@username varchar(50),
@education varchar(50),
@location varchar(50),
@status varchar(10)
)
As
BEGIN
-- Insert User Details
if @status ='INSERT'
BEGIN
INSERT INTO userdetail(username,education,location)
VALUES(@username,@education,@location)
END
-- Get User Details
if @status ='GET'
BEGIN
SELECT * FROM userdetail
END
END

Graeme_Grant

Мы не будем слепо отлаживать ваш код для вас. С каким сообщением об ошибке вы столкнулись? Пожалуйста, обновите свой вопрос, нажав на кнопку Improve question

1 Ответов

Рейтинг:
8

OriginalGriff

Посмотрите на два разных способа использования SP:

Цитата:
var cmd = new SqlCommand ("usercrudoperation", con);
УМК.CommandType = CommandType.Хранимая процедура;
УМК.Параметры.AddWithValue ("@status", " GET");
против.Открыть();
var data_adapter = new SqlDataAdapter(cmd);
var data_set = новый набор данных();
адаптер данных.Fill (data_set); / / получена ошибка
И
var cmd =  new SqlCommand("usercrudoperation", con);
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.Parameters.AddWithValue("@username", user.userid);
                cmd.Parameters.AddWithValue("@education", user.education);
                cmd.Parameters.AddWithValue("@location", user.location);
                cmd.Parameters.AddWithValue("@Status", "Insert");
                con.Open();
                ViewData["result"] = cmd.ExecuteNonQuery();
В первом случае вы вводите только один параметр и получаете ошибку.
Во втором вы задаете четыре параметра и (предположительно) не задаете.

Быстрый взгляд на определение SP:
Create Procedure usercrudoperation
(
@username varchar(50),
@education varchar(50),
@location varchar(50),
@status varchar(10)
)
As
Показывает, что он ожидает четыре параметра и что ни один из них не может быть нулевым. Параметры, которые вы не предоставляете, передаются как нулевые значения, поэтому вы получаете ошибку.
Либо предоставьте все параметры, либо измените свой SP, чтобы разрешить значения NULL для трех, которые вы не передаете.


Member 13004859

@OriginalGriff sir, решен и теперь успешно работает, изменив параметры в хранимой процедуре и сделав три из них нулевыми.
Спасибо

OriginalGriff

Пожалуйста!