Sqlexception未被用户代码处理 [英] Sqlexception was unhandled by user code
问题描述
基本上,我做了什么我在数据库表中添加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
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) ) AsShows 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屋!