2017-11-06 2 views
0

나는 내가 생각할 수있는 모든 것을 시도했다. SQL Server 데이터베이스에 객체를 생성하고 삽입하는 중입니다. 하지만이 특별한 분위기에 대해서는 작동하지 않습니다 (나는 작동하는 다른 모듈에서 재활용했습니다).DB에 값을 삽입하지 않고 0을 반환 함

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.

+1

왜 저장 프로 시저가 간단한 삽입을 위해 필요한가? 이것은 표준 데이터베이스 작업을 수행하는 매우 지저분한 방법처럼 보입니다. – tadman

+0

나도 알아 :(..하지만 프로젝트 표준을 어설프게 만든다. 간단한 삽입으로 시도하고 숨기고 할 수있는 것 같아. –

+0

이 경로를 가기 전에 간단한 삽입으로 작동하는지 확인하라. 저장 프로 시저를 사용하여 사소한 연산을 과도하게 복잡하게한다. 어떤 일도해서는 안되는 버그를 소개합니다.이 일이 표준 방식 일 경우 행운을 빈다 – tadman

답변

2

당신은이 쿼리를 실행합니다 이것을 ADO.NET으로 명령 유형

SqlCommand comando = new SqlCommand("dbo.[Referencia_Insert]", base.Db); 
comando.CommandType = CommandType.StoredProcedure 

누락 한 다음 다른 한편으로 SELECT @@IDENTITY

exec [dbo].[Referencia_Insert] ...... 

에서 값을 얻을 수 있습니다 때 명령 유형이 지정되지 않은 경우 ADO.NET은 동적 쿼리를 다음과 같이 실행합니다.

exec sp_executesql N'[dbo].[Referencia_Insert]', N'.............' 
관련 문제