我有一個執行創建,編輯,刪除和讀取操作的存儲過程。將數據類型nvarchar轉換爲int時出錯 - 執行存儲過程時
ALTER PROCEDURE [dbo].[CURDOpSP]
@operation varchar(50),
@regid int = 0,
@fname varchar(50) = null,
@lname varchar(50) = null,
@phone varchar(50) = null,
@email varchar(50) = null
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
if(@operation = 'Insert')
BEGIN
insert into Register(fname,lname,phone,email,status)values(@fname,@lname,@phone,@email,0);
END
else if(@operation = 'Select')
BEGIN
select * from Register where status = 0;
END
else if(@operation = 'Edit')
BEGIN
update Register set fname= @fname, lname = @lname, phone = @phone, email = @email where RegisterId = @regid;
END
else if(@operation = 'Delete')
BEGIN
Update Register set status = 1 where RegisterId = @regid;
END
END
而且我在Controller上調用了這個過程。
// GET: /Employee/Create
public ActionResult Create()
{
return View();
}
// POST: /Employee/Create
[HttpPost]
public ActionResult Create(Register register)
{
if (ModelState.IsValid)
{
db.Database.ExecuteSqlCommand("dbo.CURDOpSP @p0, @p1, @p2, @p3, @p4", "Insert", register.fname, register.lname, register.phone, register.email);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(register);
}
// POST: /Employee/Delete/5
public ActionResult Delete(int id)
{
Register register = db.Registers.Find(id);
if (register == null)
{
return HttpNotFound();
}
db.Database.ExecuteSqlCommand("dbo.CURDOpSP @p0, @p1", "Delete",register.RegisterId);
db.SaveChanges();
return RedirectToAction("Index");
}
當我嘗試創建一個新的記錄,我得到這個錯誤:
Error converting data type nvarchar to int.
Source Error:
Line 40: if (ModelState.IsValid)
Line 41: {
Line 42: db.Database.ExecuteSqlCommand("dbo.CURDOpSP @p0, @p1, @p2, @p3, @p4", "Insert", register.fname, register.lname, register.phone, register.email);
Line 43: db.SaveChanges();
Line 44: return RedirectToAction("Index");
其他三個操作工作的罰款。
如果我把在存儲過程中參數@regid,在參數聲明類似的末尾:
ALTER PROCEDURE [dbo].[CURDOpSP]
@operation varchar(50),
@fname varchar(50) = null,
@lname varchar(50) = null,
@phone varchar(50) = null,
@email varchar(50) = null,
@regid int = 0
然後創建將被罰款。但現在刪除功能將無法正常工作。
看起來你應該有獨立的存儲過程,所以你可以只爲每個存儲過程的相應參數... –
你的SP預計6個paramters所以在刪除您需要通過其他paramters爲好。 – Mairaj