2009-06-24 3 views
0

아마 바보 같은 질문에 사과드립니다. 내가 internets에 관해서 아무것도 발견하지 않았기 때문에, 아마 그것은 완전히 명백했다. 그리고 나는 단지 눈이 보이는 것을 볼까?!DataAdapter 업데이트 방법 - 어떤 연결을 사용합니까?

내가 DataAdapter.Update (세트)

그러나 연결을 설정할 수있는 possiblity가이 없기를 통해 데이터 세트에서 데이터베이스의 테이블을 업데이트하기 위해 노력하고있어, 지방 검사는 사용해야합니다.

DA는 DB에 연결하는 방법을 어디에서 알고 있습니까? 아니면 데이터 어댑터의 개념을 오해합니까?

내 현재 코드 같은 것입니다 : 난 그냥 쓴 및 작동 (경우 또는) ... 내가 지금까지 그것을 테스트 havent 한 방법 의심되었다

protected DataSet UpdateDataSet(DataSet ds) 
{ 
    DataSet dsChanges = new DataSet(); 
    SqlDataAdapter da = new SqlDataAdapter(); 

    dsChanges = ds.GetChanges(); 

    //Update DataSet 
    da.Update(dsChanges); 

    ds.Merge(dsChanges); 
    return ds; 
} 

, 내가 전에 다른 코드를 작성 해 있기 때문에 제대로 테스트 할 수 있습니다.

감사합니다. ppl, StackOverflow FTW!

+0

그런 다음 서로 덮어 쓰기하는 빈 데이터 세트 (dsChanges를) 인스턴스화된다. 이것을 초기화하지 마십시오. – cjk

+0

감사합니다. 이것은 더 좋을 것입니다 (?) : DataSet dsChanges = ds.GetChanges(); –

답변

5

SqlDataAdapter는 SqlConnection 개체가 연결된 SqlCommand 개체를 가져와야합니다. 그것은 계층 구조가 파괴되는 방식입니다. 당신이 그 일에 대해 가지 방법에 관해서는

, 생성자로 전달뿐만 아니라 건설 후 다양한 속성을 설정하는 옵션이 있습니다.

여기에는 msdn article의 선택, 삽입, 업데이트 및 삭제의 예가 나와 있습니다.

FTA :

public static SqlDataAdapter CreateCustomerAdapter(
    SqlConnection connection) 
{ 
    SqlDataAdapter adapter = new SqlDataAdapter(); 

    // Create the SelectCommand. 
    SqlCommand command = new SqlCommand("SELECT * FROM Customers " + 
     "WHERE Country = @Country AND City = @City", connection); 

    // Add the parameters for the SelectCommand. 
    command.Parameters.Add("@Country", SqlDbType.NVarChar, 15); 
    command.Parameters.Add("@City", SqlDbType.NVarChar, 15); 

    adapter.SelectCommand = command; 

    // Create the InsertCommand. 
    command = new SqlCommand(
     "INSERT INTO Customers (CustomerID, CompanyName) " + 
     "VALUES (@CustomerID, @CompanyName)", connection); 

    // Add the parameters for the InsertCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 

    adapter.InsertCommand = command; 

    // Create the UpdateCommand. 
    command = new SqlCommand(
     "UPDATE Customers SET CustomerID = @CustomerID, " + 
     "CompanyName = @CompanyName " + 
     "WHERE CustomerID = @oldCustomerID", connection); 

    // Add the parameters for the UpdateCommand. 
    command.Parameters.Add("@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    command.Parameters.Add("@CompanyName", SqlDbType.NVarChar, 
     40, "CompanyName"); 
    SqlParameter parameter = command.Parameters.Add(
     "@oldCustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    parameter.SourceVersion = DataRowVersion.Original; 

    adapter.UpdateCommand = command; 

    // Create the DeleteCommand. 
    command = new SqlCommand(
     "DELETE FROM Customers WHERE CustomerID = @CustomerID", connection); 

    // Add the parameters for the DeleteCommand. 
    parameter = command.Parameters.Add(
     "@CustomerID", SqlDbType.NChar, 5, "CustomerID"); 
    parameter.SourceVersion = DataRowVersion.Original; 

    adapter.DeleteCommand = command; 

    return adapter; 
} 
+0

좋아, 데이터를 검색하려고 할 때하는 일. 명령 개체를 전달합니다. 그러나 DataAdapter의 업데이트 메서드는 DataSet (및 기타 항목, 명령 개체는 허용하지 않습니다.) –

+2

@ MAD9 SqlDataAdapter에는 SqlCommand 개체와 함께 사용자의 필요에 맞게 지정할 수있는 UpdateCommand 속성도 있습니다. 이것은 또한 삽입과 삭제에도 적용됩니다. – Joseph

+0

다시 한번 감사드립니다. 문제는 명시 적으로 SQL 문자열이 없기 때문에 어디에서 명령 객체를 가져와야하는지 몰랐다는 것입니다. –

관련 문제