Sqlexception未被用户代码处理 [英] Sqlexception was unhandled by user code

查看:65
本文介绍了Sqlexception未被用户代码处理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

基本上,我做了什么我在数据库表中添加userdata并使用MVC从数据库中检索数据。我在从数据库中获取数据的Action方法中出错。请理解我,我实际上缺少的地方...... !!!



我尝试了什么:



控制器:

 使用系统; 
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Web;
使用 System.Web.Mvc;
使用 System.Data.SqlClient;
使用 System.Web.Configuration;
使用 Insert_UserDetails.Models;
使用 System.Data;

命名空间 Insert_UserDetails.Controllers
{
public class UserController:Controller
{
// 从存储过程中获取数据
public ActionResult InsertUserDetails()
{
var objuserdetail = new UserDetails();
使用(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 = <跨度类= 代码关键字>新数据集();
data_adapter.Fill(data_set); // 收到错误
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 ]。行[i ] [<跨度类= 代码串> <跨度类= 代码串 >用户ID]的ToString());
objdetails.username = data_set.Tables [ 0 ]。行[i] [ < span class =code-string> username]。ToString();
objdetails.education = data_set.Tables [ 0 ]。行[i] [ < span class =code-string> education]。ToString();
objdetails.location = data_set.Tables [ 0 ]。行[i] [ < span class =code-string> location]。ToString();
userlist.Add(objdetails);
}
objuserdetail.userinfo = userlist;
}

return 查看(objuserdetail);
}

// 将数据插入存储过程
[HttpPost]
public ActionResult InsertUserDetails(UserDetails user)
{
var objuserdetail = new UserDetails();
使用(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 插入);
con.Open();
ViewData [ result] = cmd.ExecuteNonQuery();
}
return 查看();
}
}
}



型号:

 使用系统; 
使用 System.Collections.Generic;
使用 System.Linq;
使用 System.Web;

命名空间 Insert_UserDetails.Models
{
public class UserDetails
{
// 定义userdetail表的所有字段
public int userid {获得; set ; }
public string username { get ; set ; }
public string education { get ; set ; }
public string location { get ; set ; }
public 列表< 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))
{
< 表格 > < tbody > < tr > < td > 用户名称:< / td > < td > @Html。 TextBoxFor(u => u.username)< / td > < / tr > < tr > < td > 教育:< / td > < td > @ Html.TextBoxFor(u => u.education)< / td > < / tr > ; < tr > < td > 位置:< / td > < span class =code-keyword>< td > @ Html.TextBoxFor (u => u.location)< / td > < / tr > < tr > < td > < / td > < td > < ; / td > < / tr > < < span class =code-leadattribute> / tbody > < / table >
}
< h4 > 用户详细信息< / h4 >
@if(Model!= null)
{
if(Model.userinfo.Count> 0)
{
@foreach(Model.userinfo中的var项)
{

}
< ; > < tbody > < < span class =code-leadattribute> tr > < th > UserId < / th > < > 用户名< /日 > < th > 教育< / th > < th > 位置< / 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 < span class =code-keyword>> @ Html.DisplayFor(modelitem => item.location)< / td > < / tr > < / tbody > < / table >
}
else
{
未找到详细信息。
}
}

$(function(){
var msg = '@ViewData [ 结果]';
if(msg =='1')
{
alert(用户详细信息已成功插入);
window.location.href =@ Url.Action(InsertUserDetails,User);
}
});



存储过程:

 创建 过程 usercrudoperation 

@ username varchar 50 ),
@教育 varchar 50 ),
@location varchar 50 ),
@ status varchar 10

作为
BEGIN
- 插入用户详细信息
如果 @status = ' INSERT'
BEGIN
INSERT INTO userdetail(用户名,教育,位置)
VALUES @ username @ education @ location
END
- < span class =code-comment>获取用户详细信息
如果 @ status = ' GET'
BEGIN
SELECT * FROM userdetail
结束
END

解决方案

(function(){
var msg ='@ ViewData [result]';
if(msg =='1')
{
alert(用户详细信息已成功插入);
window.location.href =@ Url.Action(InsertUserDetails,User);
}
});



存储过程:

 创建 过程 usercrudoperation 

@ username varchar 50 ),
@教育 varchar 50 ),
@location varchar 50 ),
@ status varchar 10

作为
BEGIN
- 插入用户详细信息
如果 @status = ' INSERT'
BEGIN
INSERT INTO userdetail(用户名,教育,位置)
VALUES @ username @ education @ location
END
- < span class =code-comment>获取用户详细信息
如果 @ status = ' GET'
BEGIN
SELECT * FROM userdetail
结束
END


看看这两个您使用SP的不同方式:

Quote:

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 ); //得到错误



 var cmd = new SqlCommand(   usercrudoperation,con); 
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue( @ username用户 .userid);
cmd.Parameters.AddWithValue( @ education用户。教育);
cmd.Parameters.AddWithValue( @ location用户 .location);
cmd.Parameters.AddWithValue( @ Status 插入);
con。打开();
ViewData [ result] = cmd.ExecuteNonQuery();

在第一种情况下,你只提供一个参数并得到一个错误。

在第二种情况下,你提供了四个参数,并且(大概)没有。



快速查看SP定义:

 创建 过程 usercrudoperation 

@ username varchar 50 ),
@ education varchar 50 ),
@ location varchar 50 ),
@ status varchar 10

As

显示它需要四个参数,并且它们都不能为空。您未提供的参数将作为空值传递,因此您会收到错误。

提供所有参数,或更改SP以允许未传递的三个值为空值。


Basically, What i have done i add userdata in the database table and retrieve data from the database using MVC. I got error in Action method of get data from the database. Kindly correct me , where i am actually lacking...!!!

What I have tried:

Controller:

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


Model :

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


View:

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


Stored Procedure:

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

解决方案

(function () { var msg = '@ViewData["result"]'; if (msg == '1') { alert("User Details Inserted Successfully"); window.location.href = "@Url.Action("InsertUserDetails", "User")"; } });


Stored Procedure:

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


Look at the two different ways you use the SP:

Quote:

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

And

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

In t6he first case, you supply only one parameter and get an error.
In the second you supply four parameters, and (presumably) don't.

A quick look at the SP definition:

Create Procedure usercrudoperation
(
@username varchar(50),
@education varchar(50),
@location varchar(50),
@status varchar(10)
)
As

Shows that it expects four parameters, and that none of them can be null. Parameters you do not provide are passed as null values, so you get an error.
Either provide all the parameters, or change your SP to allow nulls values for the three you do not pass.


这篇关于Sqlexception未被用户代码处理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆