2015-01-18 2 views
2

는이 코드가? 범위에 대해 읽었지만 위의 코드에서이 코드를 어떻게 사용할 수 있는지 알지 못합니다.새 행은

새 레코드를 저장 한 후 마지막 ID를보고 양식으로 리디렉션하려고합니다. 내가 가장 간단한 솔루션을 찾고 있는데요 :)

+0

안녕하십니까. 귀하가 게시 한 코드에서 삽입 문이 어디에도 보이지 않습니다. 'Szkoda'라는 테이블의 모든 레코드를 선택하는 sql 명령을 만들었습니다. 인서트는 어디에 있습니까? Thanks – Christos

+0

"szkoda"에서 모든 열을 선택하고 datarow-NewRow()에 의해 레코드를 삽입하십시오. 왼쪽에는 db의 열과 양식의 텍스트 상자에있는 값이 있습니다. –

답변

2

당신은 데이터 어댑터의 Update 명령에서 직접 할 수 없어 참조하십시오. 두 개의 명령이 들어있는 사용자 정의 삽입 명령을 준비해야합니다. 당신의 레코드를 삽입 첫 번째, 두 번째는 연결에서 마지막으로 삽입 된 ID를 반환이 대신 업데이트 그냥 새를 확인하기 위해 데이터 테이블에 대해 AcceptChanges를 호출 호출, 기존의 코드와 함께 가야한다 물론

string insertText = @"INSERT INTO Szkoda (Likwidator,FirmaObslugujaca, 
         StanSzkody, CzyRegres, KrajZdarzenia) 
         values (@lik, @fir, @sta, @czy, @kra); 
         SELECT SCOPE_IDENTITY()"; 

SqlCommand cmd = new SqlCommand(insertText, connection); 
cmd.Parameters.AddWithValue("@lik", tbLikwidator.Text); 
cmd.Parameters.AddWithValue("@fir", DdFirma.Text); 
cmd.Parameters.AddWithValue("@sta", DdStan.Text); 
cmd.Parameters.AddWithValue("@cay", DdRegres.Text); 
cmd.Parameters.AddWithValue("@kra", DdKraj.Text); 
object result = cmd.ExecuteScalar(); 
if(result != null) 
{ 
    int lastInsertedID = Convert.ToInt32(result); 
    // now insert the row in your dataset table but instead of 
    // da.Update(ds, "Szkoda"); call 
    ds.Tables["Szkoda"].AcceptChanges(); 
} 

귀하의 테이블에 기록하십시오.

+0

좋아, @ 스티브 나는 잠시 동안 당신의 해결책을 사용할 것입니다. 하지만 말해, 같은 시간에 두 명의 사용자가 레코드를 삽입하면,이 사용자는 그에게 추가 된 레코드의 ID를 얻을까요 ?? –

+1

예, [SCOPE_IDENTITY] (http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide)는 연결에서 생성 된 ID를 당신의 질문. 따라서 두 명의 사용자가이 코드를 동시에 실행하면 (어느 정도) 각 사람이 올바른 ID – Steve

+0

을 수신하게되므로 매우 효과적입니다. 감사합니다. –

0

Aftre는 C# 코드에서 SQL 쿼리 (저장 프로 시저가 아닌)를 사용하여 레코드를 삽입하면 레코드 가져 오기 기능을 사용하여 마지막 레코드 ID를 선택할 수 있습니다 muliuser 경우, 이것은 잘못 될 것입니다) max() 함수를 사용합니다.

select * from Szkoda where ID IN (select max(id) from Szkoda) 

그런 다음, 데이터를 삽입하는 저장 프로 시저에 SCOPE_Identity()를 사용하여 C# 코드에서 값을 얻기 위해 출력 매개 변수를 사용하여 저장 프로 시저를 사용하는 경우.

CREATE PROCEDURE dbo.testSP 
    @Col1 VARCHAR(50), 
    @Col2 VARCHAR(20), 
    @new_identity INT = NULL OUTPUT 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT dbo.TestTable(Col1, Col2) SELECT @Col1, @Col2; 
    SET @new_identity = SCOPE_IDENTITY(); 
END 
GO 

는이 Return identity of last inserted row from stored procedure