2009-09-01 2 views
-1
Dim sSelect As String = _ 
     "SELECT * FROM Contacts" & _ 
     " WHERE DataSetID = @DataSetID AND ID >= @FirstID AND ID <= @LastID ORDER BY ID" 


     Dim dsDBFiles As New DataSet() 
     Dim cmd As New SqlClient.SqlCommand(sSelect, m_connection) 
     cmd.Parameters.Add("@FirstID", SqlDbType.Int).Value = nFirstID 
     cmd.Parameters.Add("@LastID", SqlDbType.Int).Value = nLastID 

     Dim daTable As New SqlClient.SqlDataAdapter(cmd) 
     Dim bldr As New SqlClient.SqlCommandBuilder(daTable) 

     daTable.Fill(dsDBFiles, sTable) 
     Dim tbl As DataTable = dsDBFiles.Tables(sTable) 

     Dim rdr As New Data.DataTableReader(dsFiles.Tables(0)) 
     dsDBFiles.Load(rdr, LoadOption.Upsert, tbl) 

     daTable.Update(dsDBFiles, sTable) 

레코드를 검색하지 않고이 upsert 기능을 구현하는 방법이 있습니까? SQL Server 2005를 사용하고 있습니다. select 문을 실행하지 않고 sqladapter를 사용하여이 작업을 수행하는 방법이 있다고 들었습니다..net sqladapter로 업 그레 이드

이 과정의 속도를 높이려고합니다. 어떤 제안?

건배.

+0

정확히 무엇이 문제입니까? – gsharp

답변

0

INSERT 부분은 한 가지입니다. 새 행을 삽입해도 문제가되지 않습니다. 당신이 행을 기존 업데이트하려면

, 다음과 같은 작업을 수행해야합니다 :

  • 당신이 당신의 데이터 집합으로 업데이트 할 모든 행을 추가 (이 그렇게하는의 RowState = Added로 추가 INSERT 문에 의해 처리됩니다)
  • 해당 행에 .SetModified()을 호출하여 RowState를 modified으로 설정하십시오. 이제, UPDATE 문이 사람들을 픽업하여 데이터베이스 물론

에 적용됩니다, 당신은 또한 당신의 SqlDataAdapter를에 UpdateCommand을 설정해야합니다, 당신은 반드시 SQL UPDATE 문 작동을 확인해야합니다 그런 식으로 만 비교합니다. 업데이트 될 행을 일치시키는 기본 키.

은 수정 된 행을 DataSet에 추가하고 처음부터 검색하지 않고 업데이트 할 수 있어야합니다.

마크

관련 문제