【发布时间】:2017-11-06 18:36:16
【问题描述】:
我已经尝试了所有我能想到的。我正在创建对象,然后将其插入 SQL Server 数据库。但是对于这种特殊的心情,是行不通的(我从其他正在工作的模块中回收)。
public int Insert(int userId, int refNum, string name, string position, string lastPlace, string duration, int currentEmp,
int rehire, string reason, string areaStr, string areaWeak, string satisfac, string reasonSep, int form1, int form2,
int form3, int form4, int form5, int form6, int form7, int form8, int form9, int form10, int form11, int form12, int form13, int form14)
{
int sumForm = form1 + form2 + form3 + form4 + form5 + form6 + form7 + form8 + form9 + form10 + form10 + form11 + form12 + form13 + form14;
// SQL Command para llamar el stored procedure
SqlCommand comando = new SqlCommand("dbo.[Referencia_Insert]", base.Db);
// Title
SqlParameter spUser = new SqlParameter("@userId", System.Data.SqlDbType.Int);
spUser.Value = userId;
comando.Parameters.Add(spUser);
SqlParameter spRef = new SqlParameter("@refNum", System.Data.SqlDbType.Int);
spRef.Value = refNum;
comando.Parameters.Add(spRef);
....
SqlParameter spSumForm = new SqlParameter("@sumForm", System.Data.SqlDbType.Int);
spSumForm.Value = sumForm;
comando.Parameters.Add(spSumForm);
HttpContext.Current.Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('checa esto: "+base.ExecuteScalar(comando)+"')</SCRIPT>");
// Ejecuta la consulta
return base.ExecuteScalar(comando);
}
警报只是返回 0。没有错误,没有任何东西。
这是存储过程:
ALTER PROCEDURE [dbo].[Referencia_Insert]
@userID int,
@refNum int,
@name varchar(MAX),
@position varchar(MAX),
@lastPlace varchar(MAX),
@duration varchar(MAX),
@currentEmp int,
@rehire int,
@reason varchar(MAX),
@areaStr varchar(MAX),
@areaWeak varchar(MAX),
@satis varchar(MAX),
@reasonSep varchar(MAX),
@f1 int, @f2 int, @f3 int, @f4 int, @f5 int, @f6 int,
@f7 int, @f8 int, @f9 int, @f10 int, @f11 int, @f12 int,
@f13 int, @f14 int,
@sumForm int
WITH EXEC AS CALLER
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO [JobApplication].[dbo].[tbl_references]
([userId], [refNum],[name], [position], [lastPlace], [duration],
[currentEmp], [reHire], [reason], [areaStr], [areaWeak],
[satisfac], [reasonSep],
[form1], [form2], [form3], [form4], [form5], [form6], [form7],
[form8], [form9], [form10], [form11], [form12], [form13], [form14], [totalForm])
VALUES (@userId, @refNum, @name, @position, @lastPlace, @duration,
@currentEmp, @rehire, @reason, @areaStr, @areaWeak,
@satis, @reasonSep,
@f1, @f2, @f3, @f4, @f5, @f6, @f7,
@f8, @f9, @f10, @f11, @f12, @f13, @f14, @sumForm)
SELECT @@IDENTITY
END
由于某种原因,它只是在ExecuteScalar 中返回一个 0。为什么?我不明白,因为每次我尝试显示值时,它们都会显示。我在本节中称它为任意值。
它应该在插入任何东西时返回 1,但我得到的只是 0。
protected void btnSend_Click(object sender, EventArgs e)
{
ASF.HC.JobApplication.BO.Referencia refo = new ASF.HC.JobApplication.BO.Referencia();
refo.Insert(370,1,"pruebini","tQM","la vida","la vida",1,1,"se fue","fuerza","debil","eu","holini",1,2,3,4,5,6,7,8,9,10,11,12,13,14);
}
EB。
【问题讨论】:
-
为什么简单插入需要存储过程?这似乎是一种非常混乱的标准数据库操作方式。
-
我知道 :( .. 但是 foking 项目标准.. 我想我可以尝试隐藏并在一个简单的插入中做到这一点。
-
在走这条路之前验证它是否作为一个简单的插入工作。使用存储过程来包装琐碎的操作会使事情变得过于复杂,并在不应该存在的地方引入错误。如果这是标准的做事方式,祝你好运。
-
是的,这所学校(在教育领域工作)实施的标准并不好。我想我需要一些运气。谢谢!
-
我建议使用
SCOPE_IDENTITY()而不是其他任何东西(如@@IDENTITY)来获取新插入的标识值。 See this blog post for an explanation as to WHY
标签: c# sql-server insert sql-insert