01/10/2018, 08:57

Lỗi db.savechangs() trong asp.net MVC C#

Mình tạo 1 action thêm mới tài khoản, có liên kết lấy id ở các bảng phụ, nhưng khi lưu lại thì báo lỗi, mọi người chỉ giúp mình giải pháp sửa lỗi với, mình mới học nên chưa rành lắm.

Khi nhấn nút để Submit sữ liễu vào thì bị báo lỗi chỗ db.SaveChangs()

Trong Controller:

sing System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Model;

namespace test.Controllers
{
    public class CreateController : Controller
    {
        //
        // GET: /Create/

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

        //
        // GET: /Create/Details/5
        Db db = new Db();
        public ActionResult CreateMember()
        {
            User obj = new User();
            obj.SelectListBdh = new SelectList(db.Bdhs.ToList(), "BdhId", "BdhFullname");
            obj.SeclectListFg = new SelectList(db.Fgs.ToList(), "FgId", "FgName");
            obj.SelectListLevel = new SelectList(db.Levels.ToList(), "LevelId", "LevelName");
            return View(obj);
        }

        [HttpPost]
        public ActionResult CreateMember(User obj)
        {
            db.Users.Add(obj);
            db.SaveChanges();
            return View(obj);
        }
    }
}

Trong View:

@model Model.User
@{
    ViewBag.Title = "CreateMember";
}

<a href="~/Views/Login/Index.cshtml">~/Views/Login/Index.cshtml</a>
<a href="~/Views/Create/CreateMember.cshtml">~/Views/Create/CreateMember.cshtml</a>
<h2>CreateMember</h2>
@using (Html.BeginForm("CreateMember", "Create", FormMethod.Post, new { @class = "form" }))
{ <div>
        <p>
            <label>Nhập email học viên:</label>
            @Html.TextBoxFor(m => m.UserId)
        </p>
        <p>
            <label>Nhập họ và tên đệp học viên</label>
            @Html.TextBoxFor(m => m.UserLastName)
        </p>
        <p>
            <label>Nhập tên học viên  </label>
            @Html.TextBoxFor(m => m.UserFirstName)
        </p>
        <p>
            <label>Nhập điện thoại học viên  </label>
            @Html.TextBoxFor(m => m.UserPhone)
        </p>
        <p>
            <label>Nhập ngày sinh  </label>
                <input type="date" name="UserBirth" />
        </p>
        <p>
            <label>Chọn Ban Điều hành đã tư vấn  </label>

            @if (Model.SelectListBdh != null)
            {
                @Html.DropDownListFor(m => m.UserAddId, Model.SelectListBdh)
            }
            else
            {
                <h3>Ban level cho hoc vien</h3>
            }
            @if (Model.SelectListLevel!= null)
            {
                @Html.DropDownListFor(m => m.LevelNownId, Model.SelectListLevel)
            }
            else
            {
                <h3>Chưa có bảng level</h3>
            }

            <h3>Ban lớp bắt đầu cho học viên</h3>
            }
            @if (Model.SeclectListFg != null)
            {
                @Html.DropDownListFor(m => m.StarMark, Model.SeclectListFg)
            }
            else
            {
                <h3>Chưa có bảng lớp</h3>
            }

        </p>

        <p>
            <input type="submit" class="btn-default" value="Hoàn thành" />
        </p>
    </div>

Và Database sql:


Create table Level --Danh sách Ban điều hành hỗ trợ
(
LevelId int identity primary key,
LevelName  nvarchar(128),
StarMin int  DEFAULT 0,
)
Insert into Level(LevelName,StarMin)
VALUES (N'NHẬP MÔN', 0),(N'XE BÍCH', 16), (N'XE CHUỒN', 32)



create table Bdh
(
BdhId  int identity  primary key,
BdhName nvarchar(128),
BdhLastName nvarchar(128),
BdhFullname nvarchar(256),
HeadId int DEFAULT 1,
)

insert into Bdh ( BdhLastName, BdhName, BdhFullname, HeadId)
values (N'Chưa cập nhật', N'Chưa cập nhật', N'Chưa cập nhật', 1)
, 

( N'Nguyễn Lê Thăng', N'Long', N'Nguyễn Lê Thăng Long', 5)


Create table Coach
(
CoachId int identity primary key,
CoachName nvarchar(128),
CoachLastName nvarchar(128),
CoachFullname nvarchar(256),
HeadId int DEFAULT 1,
)

insert into Coach( CoachLastName, CoachName, CoachFullname, HeadId)
values (N'Chưa cập nhật', N'Chưa cập nhật', N'Chưa cập nhật', 1), 

( N'Nguyễn Lê Thăng', N'Long', N'Nguyễn Lê Thăng Long', 5)

Create table Train
(
TrainId   int identity   primary key,
TrainName nvarchar(128),
TrainLastName nvarchar(128),
TrainFullname nvarchar(256),
HeadId int DEFAULT 1,
)

insert into Train (TrainLastName, TrainName, TrainFullname, HeadId)
values (N'Chưa cập nhật', N'Chưa cập nhật', N'Chưa cập nhật', 1)
, ( N'Nguyễn Lê Thăng', N'Long', N'Nguyễn Lê Thăng Long', 5)



Create table Users
(
UserId varchar(50) primary key,
UserName nvarchar(128),     --Tên đang nhập
UserUserName nvarchar(128) , --Ten hiển thị dụng
UserFullname nvarchar(256),
UserPass nvarchar(128) ,
UserEmail varchar(128) ,
UserImage nvarchar(320),
UserCreateUserId int  DEFAULT 1, --nguowi taoj ra thong tin ban dau (ke toans,..)
UserCreateDate datetime  DEFAULT  getdate(),
UserFirstName nvarchar(120),
UserLastName nvarchar(64),
UserPhone nvarchar(20),
UserBirth datetime DEFAULT  getdate(),
HappBirth bit  DEFAULT 0, 
UserAddId    int  DEFAULT 1, --Id nguoi tu van ban dau (bdh)
LevelNownId int  DEFAULT 1,
StarMark int DEFAULT 0,
FgBeginId   int  DEFAULT 1,
FgNownId int   DEFAULT 1,
FgEndId int  DEFAULT 1 , -- Fg cao nhất mà lần đóng trước đã đóng
FgFutureId  int  DEFAULT 1 -- Fg cao nhất mà lần đang đóng sẽ đóng (nếu người đóng lần đầu tiên thì FgFutureId = FgEndId)
)

go
insert into Users(UserId, UserName, UserPass, UserCreateUserId, UserFirstName, UserLastName, UserPhone,
 UserAddId)
values ('NooneNoone@gmail.com', N'Vô danh', N'123456', 1, N'Vô danh',N'Vô danh','00000000000',1)

insert into Users (UserId,UserLastName, UserFirstName, UserFullname)
values ('thanglong.bigedu@gmail.com', N'Nguyễn Lê Thăng', N'Long', N'Nguyễn Lê Thăng Long'), 
('kietnguyen.bigedu@gmail.com', N'Nguyễn Văn', N'Kiệt', N'Nguyễn Văn Kiệt')



Create table Fg
(
FgId int identity primary key,
FgName nvarchar(128),
FgGroupId int   DEFAULT 1 ,
FgProgrameId int  DEFAULT 1,
FgDiscr nvarchar(max)
)
go

insert into Fg(FgName)
values(N'Chưa học'),('Fg1'), ('Fg2'), ('Fg3'), ('Fg4'), ('Fg5'), ('Fg6'), ('Fg7'), ('Fg8'), ('Fg9')


go
Use [ACTFGV2]
go
set ansi_nulls on
go
set quoted_identifier on
go
create procedure [dbo].[AccountLogin]
@UserName nvarchar(20),
@Password nvarchar(50)
as
begin
declare @count int
declare @res bit
select @count =count(*) from Users where UserId=@UserName and UserPass=@Password
if @count >0
	set @res =1
else
	set @res=0
select @res 
end
ACP viết 11:08 ngày 01/10/2018

Click View Detail để xem chi tiết, thường thì nó báo lỗi cụ thể hơn, bạn xem xong là biết chỗ sửa. Nếu không thì post phần chi tiết lên đây cho mọi người giúp.

Đức Minh viết 11:06 ngày 01/10/2018

Cảm ơn bác, bác xem thử giúp mình nhé:

System.Data.Entity.Infrastructure.DbUpdateException was unhandled by user code
  HResult=-2146233087
  Message=An error occurred while updating the entries. See the inner exception for details.
  Source=EntityFramework
  StackTrace:
       at System.Data.Entity.Internal.InternalContext.SaveChanges()
       at System.Data.Entity.Internal.LazyInternalContext.SaveChanges()
       at System.Data.Entity.DbContext.SaveChanges()
       at MyAction.Controllers.CreateController.CreateMember(User obj) in d:\Action english\A WEN FG NHANH\Duan 4\MyAction\MyAction\Controllers\CreateController.cs:line 36
       at lambda_method(Closure , ControllerBase , Object[] )
       at System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase controller, Object[] parameters)
       at System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 parameters)
       at System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext, ActionDescriptor actionDescriptor, IDictionary`2 parameters)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass42.<BeginInvokeSynchronousActionMethod>b__41()
       at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass8`1.<BeginSynchronous>b__7(IAsyncResult _)
       at System.Web.Mvc.Async.AsyncResultWrapper.WrappedAsyncResult`1.End()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.EndInvokeActionMethod(IAsyncResult asyncResult)
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass37.<>c__DisplayClass39.<BeginInvokeActionMethodWithFilters>b__33()
       at System.Web.Mvc.Async.AsyncControllerActionInvoker.<>c__DisplayClass4f.<InvokeActionMethodFilterAsynchronously>b__49()
  InnerException: System.Data.Entity.Core.UpdateException
       HResult=-2146233087
       Message=An error occurred while updating the entries. See the inner exception for details.
       Source=EntityFramework
       StackTrace:
            at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()
            at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.<Update>b__2(UpdateTranslator ut)
            at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update[T](T noChangesResult, Func`2 updateFunction)
            at System.Data.Entity.Core.EntityClient.Internal.EntityAdapter.Update()
            at System.Data.Entity.Core.Objects.ObjectContext.<SaveChangesToStore>b__35()
            at System.Data.Entity.Core.Objects.ObjectContext.ExecuteInTransaction[T](Func`1 func, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction, Boolean releaseConnectionOnSuccess)
            at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesToStore(SaveOptions options, IDbExecutionStrategy executionStrategy, Boolean startLocalTransaction)
            at System.Data.Entity.Core.Objects.ObjectContext.<>c__DisplayClass2a.<SaveChangesInternal>b__27()
            at System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy.Execute[TResult](Func`1 operation)
            at System.Data.Entity.Core.Objects.ObjectContext.SaveChangesInternal(SaveOptions options, Boolean executeInExistingTransaction)
            at System.Data.Entity.Core.Objects.ObjectContext.SaveChanges(SaveOptions options)
            at System.Data.Entity.Internal.InternalContext.SaveChanges()
       InnerException: System.Data.SqlClient.SqlException
            HResult=-2146232060
            Message=Invalid column name 'Bdh_BdhId'.
            Source=.Net SqlClient Data Provider
            ErrorCode=-2146232060
            Class=16
            LineNumber=1
            Number=207
            Procedure=""
            Server=MINH-PC\MINH
            State=1
            StackTrace:
                 at System.Data.SqlClient.SqlConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
                 at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action`1 wrapCloseInAction)
                 at System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose)
                 at System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior, SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean& dataReady)
                 at System.Data.SqlClient.SqlCommand.FinishExecuteReader(SqlDataReader ds, RunBehavior runBehavior, String resetOptionsString, Boolean isInternal, Boolean forDescribeParameterEncryption)
                 at System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, Boolean async, Int32 timeout, Task& task, Boolean asyncWrite, Boolean inRetry, SqlDataReader ds, Boolean describeParameterEncryptionRequest)
                 at System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior, RunBehavior runBehavior, Boolean returnStream, String method, TaskCompletionSource`1 completion, Int32 timeout, Task& task, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
                 at System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 completion, String methodName, Boolean sendToPipe, Int32 timeout, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry)
                 at System.Data.SqlClient.SqlCommand.ExecuteNonQuery()
                 at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.<NonQuery>b__0(DbCommand t, DbCommandInterceptionContext`1 c)
                 at System.Data.Entity.Infrastructure.Interception.InternalDispatcher`1.Dispatch[TTarget,TInterceptionContext,TResult](TTarget target, Func`3 operation, TInterceptionContext interceptionContext, Action`3 executing, Action`3 executed)
                 at System.Data.Entity.Infrastructure.Interception.DbCommandDispatcher.NonQuery(DbCommand command, DbCommandInterceptionContext interceptionContext)
                 at System.Data.Entity.Internal.InterceptableDbCommand.ExecuteNonQuery()
                 at System.Data.Entity.Core.Mapping.Update.Internal.DynamicUpdateCommand.Execute(Dictionary`2 identifierValues, List`1 generatedValues)
                 at System.Data.Entity.Core.Mapping.Update.Internal.UpdateTranslator.Update()
            InnerException:
Interns viết 11:00 ngày 01/10/2018

Lỗi này là do một số field User không hợp lệ nên không thể insert vào DB.
Ví dụ:

  • Một số field trong DB yêu cầu NOT NULL mà bạn truyền vào giá trị null

  • Giá trị khóa ngoại không hợp lệ

Để sửa thì bạn xem lại các field của object cần insert hợp lệ chưa

Đăng Trần viết 11:04 ngày 01/10/2018

Em nhập tay thử trong database xem có vấn đề gì không. Số file cần thêm vào dữ liệu trên form đủ các yêu cầu bắt buộc không.

Đức Minh viết 10:58 ngày 01/10/2018

Minh đã nhập thử bằng tay và bằng thủ tục trên SQL thấy bình thường ạ:

Đăng Trần viết 11:10 ngày 01/10/2018

Nhớ các file em nhập nhé giờ thay vì add vào dữ liệu thì em cho cái action của mình view ra một thẻ html.
Rồi chắc chắn em biết chỗ sai liền.

Đăng Trần viết 11:12 ngày 01/10/2018

Nếu không xong nữa em gửi full class add lỗi đó lên đây anh mần thịt nó tiếp em. Giờ phải ngủ rồi.

Đức Minh viết 11:05 ngày 01/10/2018

Dạ, em cảm ơn anh ạ, nhưng trên này em new mem nên không gửi được file đính kèm ạ. Em nén nó lại gồm project em đang làm, code đưa lên google drive em sent lên, bác coi giúp em nhé: https://drive.google.com/file/d/0BxxcpKC4hw8HT3BpbVZBOVFTSjg/view?usp=sharing

Đức Minh viết 11:05 ngày 01/10/2018

Có bác nào ở HCM chuyên trị ASP.Net MVC C# nhận kèm cấp tốc có phí giúp em vài ngày được không ạ. Xin trân đội ơn các anh chị em :’(

Đăng Trần viết 11:08 ngày 01/10/2018
stackoverflow.com
CSharpBeginner

Entity Framework - "An error occurred while updating the entries. See the inner exception for details"

c#, entity-framework, ef-model-first
asked by CSharpBeginner on 10:59PM - 13 Jun 14

tham khảo thêm link ở trên em.

Nguyen Ca viết 11:09 ngày 01/10/2018

Message=Invalid column name ‘Bdh_BdhId’.

báo lỗi trên kìa…
@Duc_Minh_Pham1
sorry bác @Tran_Dang. reply nhầm

Đức Minh viết 11:06 ngày 01/10/2018

Cảm ơn các bác, mình mò lại đêm qua tới giờ chưa xong, mình đang ngồi code tay lại xem sao. Chúc cả nhà ngày mới tràn đầy năng lượng nhé

Interns viết 11:12 ngày 01/10/2018

Vãi thật.
Đã bảo là do một số field của object cần insert không hợp lệ.
Giờ phải test từng field để xem giá trị field nào là không hợp lệ.

P/S: Lỗi này mình gặp hoài à

ACP viết 11:03 ngày 01/10/2018

Mình không nghĩ là mình giỏi nhưng ít nhất mình đã đi làm được vài năm (làm về .NET MVC). Nếu bạn có câu hỏi gì thì có thể mail cho mình (haovtit@gmail.com), ban ngày mình đi làm, ban đêm mình sẽ giúp

ACP viết 11:09 ngày 01/10/2018

Code lại? Sao phải làm vậy. Kiểm tra lại trong code có chỗ nào xài sai tên cột không, nó thông báo lỗi vậy mà: Message=Invalid column name ‘Bdh_BdhId’.
Code lại có khi lại đụng lỗi này tiếp thì khóc bằng tiếng Thái

Đức Minh viết 11:05 ngày 01/10/2018

Dạ, em cảm ơn bác. Em coppy cái code sql sang bên Exel lọc, cộng chuỗi lại thành hàm rồi copy - paste qua class nên cũng nhanh ạ. Mong được bác và các anh chị em chỉ dạy thêm ạ.

Bài liên quan
0