2012-08-27 4 views
2

ASP.NET 4.0, C# 및 SQL Server 2008 R2를 사용하고 있습니다. 나는 SQL 테이블 User_Info2에 저장된 웹 페이지의 사용자로부터 UserName을 얻고 있습니다. SQL Server 2008 기능 "계산 된 열"을 사용하여 을 저장 프로 시저를 사용하여 Insert마다 자동으로 생성합니다. 버튼을 클릭하면 레코드를 삽입 한 후 Vendor_ID와 메시지를 표시하려고합니다. 아무도 저장 프로 시저에서 Vendor_ID 열을 가져 오는 방법을 알려주십시오.저장된 프로 시저에서 계산 된 열 값을 얻는 방법

CREATE TABLE User_Info2 
    ( SNo int Identity (2000,1) , 
     Vendor_ID AS 'VEN' + CAST(SNo as varchar(16)) PERSISTED PRIMARY KEY, 
     UserName VARCHAR(30) NOT NULL 
    ) 

저장 프로 시저

ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30) 
    AS 
    BEGIN 
     SET NOCOUNT ON; 

     INSERT INTO User_Info2 (UserName) VALUES (@UserName) 
    END 

C# 코드 :

protected void BtnUserNext_Click(object sender, EventArgs e) 
{  
    SqlConnection SqlCon = new SqlConnection(GetConnectionString()); 
    SqlCommand cmd = new SqlCommand(); 
    cmd.CommandType = CommandType.StoredProcedure; 
    cmd.CommandText = "usp_User_Info2"; 
    cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = txtUserName.Text.Trim();  
    cmd.Connection = SqlCon;  
    try 
    {  
    SqlCon.Open(); 
    cmd.ExecuteScalar(); 
    } 
    finally 
    { 
    string url = "../CompanyBasicInfo.aspx?Parameter=" + Server.UrlEncode ("+ Vendor_ID +"); 
    ClientScript.RegisterStartupScript(this.GetType(),"callfunction", 
    "alert('Login created successfully for "+ Vendor_ID +"'); 
    window.location.href = '" + url + "';", true); 
    SqlCon.Close();  
    }  
} 
+0

id 값을 삽입 하시겠습니까 ?? –

+0

마지막 레코드 –

+0

에 대한 검색어를 선택하십시오. 이와 같은 SP에 Vendor_ID를 선언해야합니까? @ Vendor_ID INT OUTPUT? – Hari

답변

6

할 수 있습니다 당신이 저장 프로 시저를 실행할 때 다음 OUTPUT 절을 사용하여, 삽입 된 값을 읽어 출력 :

ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO User_Info2 (UserName) 
    OUTPUT Inserted.Vendor_ID 
    VALUES (@UserName) 
END 
(210)

와 C#의 호출 코드 :

object spResult; 
    string vendorID; 

    try 
    {  
    SqlCon.Open(); 
    spResult = cmd.ExecuteScalar(); 

    if(spResult != null) // check to make sure you got something back! 
    { 
     vendorID = spResult.ToString(); 
    }   
    } 
+0

** 좋은 설명 –

+1

+1 멋진 기능 .. 유용한 정보 –

0

은 또한 u는이

select top(1) Vendor_ID from User_Info2 order by SNo desc 
+0

이것은 "최상위 1"행을 반환합니다 - 반드시 삽입 된 것은 아니지만 ... 여러 클라이언트가 여러 행을 삽입 한 경우 더 많거나 적은 동시에 ?? 방금 마지막으로 돌아 오겠지 만이 호출이 삽입되지 않았을 수도 있습니다 ..... –

+0

삽입 후이 쿼리를 실행하면 마지막 삽입 레코드가 표시됩니다 –

+0

로드, 이것은 ** 신뢰할 수 없습니다 ** 전혀 아닙니다. .... 데이터베이스에 50 명의 고객이있는 경우 ** 실제로 ** 실제로 ** 삽입 한 행을 다시 얻을 ** 보장은 없습니다 **.적어도 ** 반드시 올바른 행을 선택해야합니다 :'WHERE UserName = @ UserName' - 그러나 그것도 100 % 안전하고 신뢰할 수 없습니다. –

1

같이 할 수있는 당신은 당신이 할 수있는이

ALTER PROCEDURE [dbo].[usp_User_Info2] @UserName VARCHAR(30) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    declare @Id int 

    INSERT INTO User_Info2 (UserName) VALUES (@UserName) 

    SET @Id = Scope_Identity() 

    SELECT Vendor_ID From User_Info2 WHERE SNo = @Id 
END 

C#

try 
{  
    SqlCon.Open(); 
    string VendorID = cmd.ExecuteScalar() as string; 
} 
+0

이제 문제가 생깁니다.이 부분을 참조하십시오. http://stackoverflow.com/questions/12137760/how-to-get-computed-column-value-in-stored-procedure – Hari

+0

무슨 뜻입니까? ? 새 질문을 할 수 있습니다 – codingbiz

+0

예. 매개 변수를 계산 열 Vendor_ID에 전달할 수 없습니다. 오류 "프로 시저 또는 함수 usp_User_Info3의 인수가 너무 많습니다."에 대한 해결 방법을 찾을 수 없습니다. 새 질문을 여기에서 요청했습니다. http://stackoverflow.com/questions/12156132/stored-procedure-error-when-use-computed-column-for-id – Hari

0

을 시도 할 수 있습니다 현재 도움말을 사용하여 행 삽입 SCOPE_IDENTITY()

SET @SNo = SCOPE_IDENTITY() 

의 삽입 쿼리 아래 당신이 @SNo

에 선택 쿼리를 실행할 수 있습니다 그래서는 다음과 같습니다

ALTER PROCEDURE [dbo].[usp_User_Info2] 
(
    @UserName VARCHAR(30), 
    @SNo int, 
    @Vendor_ID VARCHAR(50) OUTPUT 
) 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO User_Info2 (UserName) VALUES (@UserName) 
    SET @SNo = Scope_Identity() 


    select @Vendor_ID as Vendor_ID from User_Info2 where SNo = @SNo 

END 

편집 : 지금 그래서

SqlParameter[] param= new SqlParameter[1]; 

param[0] = new SqlParameter("@Vendor_ID", 0); 
param[0].Direction = ParameterDirection.Output; 

// Here there will be a Stored Procedure Call 

int VendorID = Convert.ToInt32(param[0].Value); 

너는것이다.은 Output 변수입니다.

+0

프런트 엔드 C# 코드에서 Vendor_ID를 검색하는 방법을 알려주십시오. – Hari

+0

답변을 업데이트했습니다 ... @ 하리 –

+0

이것을 참조하고 회신 해주십시오. 미리 감사드립니다. http://stackoverflow.com/questions/12137760/how-to-get-computed-column-value-in-stored-procedure – Hari

관련 문제