2011-05-12 5 views
2

범위 식별자 사용에 대한 저의 개념은 다음과 같습니다. 내 개념을 지원하는 범위 ID를 사용하는 적절한 방법은 무엇입니까? 하나의 데이터에 대한SQL 명령에서 범위 ID를 사용하는 방법?

:

Imports System.Data.SqlClient 

Public Class Class1 

    Sub Something() 

     Using con As SqlConnection = New SqlConnection("ConnnectionString") 
      Dim tran As SqlTransaction = con.BeginTransaction("ATransaction") 

      Using cmd As SqlCommand = New SqlCommand("DECLARE @ScopeId bigint;INSERT INTO AuditEvents(UserId) VALUES(@UserId);SELECT @ScopeId=SCOPE_IDENTITY();") 
       cmd.Parameters.AddWithValue("@UserId", 1) 
       cmd.Transaction = tran 

       For rowNumber As Integer = 0 To 5 'DataGridView.Rows.Count - 1 

       Next 

       Using childCommand As SqlCommand = New SqlCommand("INSERT INTO AuditEventDetails(EventId, ResourceName, OldValue, NewValue) SELECT @EventId, @ResourceName, @OldValue, @NewValue") 
        childCommand.Parameters.AddWithValue("@EventId", "@ScopeId") '??????? 
        childCommand.Parameters.AddWithValue("@ResourceName", "Something") 
        childCommand.Parameters.AddWithValue("@OldValue", "OldValue") 
        childCommand.Parameters.AddWithValue("@NewValue", "NewValue") 

        '............................................................................ 
        '............................................................................ 
        '............................................................................ 
        '............................................................................ 
       End Using 

      End Using 
     End Using 
    End Sub 

End Class 

여러 데이터를 들면 : 당신이 저장 발동을 사용하는 경우

Imports System.Data.SqlClient 

Public Class Class1 

    Sub Something() 

     Using con As SqlConnection = New SqlConnection("ConnnectionString") 
      Dim tran As SqlTransaction = con.BeginTransaction("ATransaction") 

      Using cmd As SqlCommand = New SqlCommand("DECLARE @ScopeId bigint;INSERT INTO AuditEvents(UserId) VALUES(@UserId);SELECT @ScopeId=SCOPE_IDENTITY();") 
       cmd.Parameters.AddWithValue("@UserId", 1) 
       cmd.Transaction = tran 

       For rowNumber As Integer = 0 To 5 'DataGridView.Rows.Count - 1 

       Using childCommand As SqlCommand = New SqlCommand("INSERT INTO AuditEventDetails(EventId, ResourceName, OldValue, NewValue) SELECT @EventId, @ResourceName, @OldValue, @NewValue") 
        childCommand.Parameters.AddWithValue("@EventId", "@ScopeId") '??????? 
        childCommand.Parameters.AddWithValue("@ResourceName", "Something") 
        childCommand.Parameters.AddWithValue("@OldValue", "OldValue") 
        childCommand.Parameters.AddWithValue("@NewValue", "NewValue") 

        '............................................................................ 
        '............................................................................ 
        '............................................................................ 
        '............................................................................ 
       Next 
       End Using 

      End Using 
     End Using 
    End Sub 

End Class 

답변

1

, 그때는 출력 매개 변수를 사용하는 것이 바람직하다 생각합니다.

텍스트 기반 SQL 명령의 경우, 다음과 같은 것을 사용하는 경향이 있습니다.

public int InsertRecord(string ANumber, string Note) 
    { 
     string SQL_INSERT_RECORD = "INSERT INTO AnumberNotes (ANumber, Note) VALUES (@ANumber, @Note) ; SELECT CAST(scope_identity() AS int)"; 
     int NewId = -1; 
     try 
     { 
      using (IDbConnection conn = DBFactory.GetConnection()) 
      { 
       using (IDbCommand cmd = conn.CreateCommand()) 
       { 
        cmd.CommandText = SQL_INSERT_RECORD; 
        cmd.Parameters.Clear(); 
        IDbDataParameter param = cmd.CreateParameter(); 
        param.ParameterName = "@ANumber"; 
        param.Value = ANumber; 
        cmd.Parameters.Add(param); 

        param = cmd.CreateParameter(); 
        param.ParameterName = "@Note"; 
        param.Value = Note; 
        cmd.Parameters.Add(param); 

        NewId = (Int32) cmd.ExecuteScalar(); 
       } 
      } 
     } catch(Exception ex) { 
      throw new DAOException("AnumberNotesDAOBase.insertRecord: ", ex); 
     } 
     return NewId; 
    } 
관련 문제