2017-11-03 7 views
0

내 테이블에 자동으로 증가되는 기본 키 열 ProductId이 있습니다. 다음은 저장 프로 시저를 사용하여 제품을 삽입하는 코드입니다. 삽입 된 행의 첫 번째 열 값은 아무 것도 아니지만 productId이지만 ExecuteScalar은 항상 0을 반환합니다 - 이유는 무엇입니까?ExecuteScalar가 현재 행의 첫 번째 열을 반환하지 않습니다.

Command = new SqlCommand("spInsertProduct", Connection); 
Command.CommandType = CommandType.StoredProcedure; 

Command.Parameters.AddRange(aSqlParameter); 

Connection.Open(); 
Int32 productId = Convert.ToInt32(Command.ExecuteScalar()); 
+1

을 반환하고 있습니까? – nikunjM

+0

아니오 제품 정보를 삽입하십시오. –

+2

그래서'spInsertProduct'가 저장된 proc이'ExecuteScalar'를 기대하지 않는 이유는 무엇입니까? – Igor

답변

1

저장 프로 시저 : 데이터를 검색 할 수

SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

CREATE PROCEDURE [dbo].[AddEmployeeReturnIDwithoutput] 
     @FirstName varchar(50), 
     @LastName varchar(50), 
     @BirthDate datetime, 
     @City varchar(50), 
     @Country varchar(50), 
     @id int output 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO Employees (FirstName, LastName, BirthDate, City, Country) 
    VALUES (@FirstName, @LastName, @BirthDate, @City, @Country) 

    SET @id = SCOPE_IDENTITY() 

    RETURN @id 
END 

논리 :

// Using Output parameter 
String strConnString = ConfigurationManager.ConnectionStrings["conString"].ConnectionString; 
SqlConnection con = new SqlConnection(strConnString); 

SqlCommand cmd = new SqlCommand(); 
cmd.CommandType = CommandType.StoredProcedure; 
cmd.CommandText = "AddEmployeeReturnIDwithoutput"; 

cmd.Parameters.Add("@FirstName", SqlDbType.VarChar).Value = txtFirstName.Text.Trim(); 
cmd.Parameters.Add("@LastName", SqlDbType.VarChar).Value = txtLastName.Text.Trim(); 
cmd.Parameters.Add("@BirthDate", SqlDbType.DateTime).Value = txtBirthDate.Text.Trim(); 
cmd.Parameters.Add("@City", SqlDbType.VarChar).Value = txtCity.Text.Trim(); 
cmd.Parameters.Add("@Country", SqlDbType.VarChar).Value = txtCountry.Text.Trim(); 
cmd.Parameters.Add("@id", SqlDbType.Int).Direction = ParameterDirection.Output;  

cmd.Connection = con; 

try 
{ 
    con.Open(); 
    cmd.ExecuteNonQuery() ; 
    string id = cmd.Parameters["@id"].Value.ToString() ; 
    lblMessage.Text = "Record inserted successfully. ID = " + id; 
} 
catch (Exception ex) 
{ 
    throw ex; 
} 
finally 
{ 
    con.Close(); 
    con.Dispose(); 
} 

이렇게하면 저장 프로 시저에서 아무것도 반환하지 않는 경우 .. 어떻게해야하는 방법이다 , 당신은 어떠한 가치도 얻지 못할 것입니다. 저장 프로 시저에서