C# 执行存储过程时,将数据类型nvarchar转换为int时出错
我有一个执行创建、编辑、删除和读取操作的存储过程C# 执行存储过程时,将数据类型nvarchar转换为int时出错,c#,sql-server,asp.net-mvc,entity-framework,stored-procedures,C#,Sql Server,Asp.net Mvc,Entity Framework,Stored Procedures,我有一个执行创建、编辑、删除和读取操作的存储过程 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 pre
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
我在控制器上调用了这个过程
// 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");
}
当我尝试创建新记录时,出现以下错误:
将数据类型nvarchar转换为int时出错
源错误:
第40行:if(ModelState.IsValid)
第41行:{
第42行:db.Database.ExecuteSqlCommand(“dbo.CURDOpSP@p0、@p1、@p2、@p3、@p4”、“插入”、register.fname、register.lname、register.phone、register.email);
第43行:db.SaveChanges()
第44行:返回重定向操作(“索引”)
其他三个操作都很正常
如果我在存储过程中放置参数@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
然后创建就可以了。但是现在删除功能将不起作用。当您在
delete
方法中调用它时,您还需要传递其他参数。我想parameter@regid位于末尾,就像您在末尾发布的一样
db.Database.ExecuteSqlCommand("dbo.CURDOpSP @p0, @p1,@p2,@p3@,@p4,@p5", "Delete","","","","",register.RegisterId);
看起来您应该有单独的存储过程,这样您就可以为每个存储过程提供适当的参数……您的SP需要6个参数,因此在delete中您还需要传递其他参数。