2012-05-21 4 views
0

간단한 Winform 응용 프로그램을 만들 때 Sqlite v1.0.79 및 vs2010을 사용합니다.SQLite DataAdapter no update 또는 insert

고객 테이블이 있고 SQLiteDataAdapter를 사용하여 레코드를 쉽게 삽입, 업데이트 및 삭제하려고합니다. 그래서 전체 삽입, 업데이트 및 삭제 문을 입력 할 필요가 없습니다.

그래서 데이터 집합을 반환하는 정적로드 함수가있는 Customer 클래스가 있습니다.

private static SQLiteDataAdapter _Adapter; 

    internal static DataSet Load(long id) 
    { 
    var q = "SELECT * FROM Customer WHERE id = {0}".FormatInvariant(id); 
    var cmd = new SQLiteCommand(); 
    cmd.Connection = [_Connection]; 
    cmd.CommandType = CommandType.Text; 
    cmd.CommandTimeout = 10; 
    cmd.CommandText = commandText; 
    return cmd;   _Adapter = new SQLiteDataAdapter(); 
    _Adapter.SelectCommand = cmd; 
    var ds = new DataSet(); 
    _Adapter.Fill(ds, "Customer"); 
    if (id == 0) 
    { 
     ds.AddRow(ds.NewRow()); 
    } 
    var b = new SQLiteCommandBuilder(_Adapter); 
    _Adapter.AcceptChangesDuringUpdate = true; 
    _Adapter.InsertCommand = b.GetInsertCommand(); 
    _Adapter.UpdateCommand = b.GetUpdateCommand(); 
    _Adapter.DeleteCommand = b.GetDeleteCommand(); 

    // Commented out code for note A: 
    ////ds.SetRowValue("lastname", "blaat44"); 
    ////_Adapter.Update(ds, "Customer"); 

    return ds; 
    } 

Load 메서드를 호출 한 후 DataSet은 Windows 폼의 바인딩에 사용됩니다. 그리고 약간의 변경 후에 Save 메소드가 호출되어 변경 사항을 저장해야합니다.

internal static void Save(DataSet data) 
    { 
    //// data.AcceptChanges(); 
    _Adapter.Update(data, "Customer"); 
    } 

그러나 업데이트 후 데이터베이스가 아무 것도 업데이트하지 않습니다. 나는 무엇을 놓치고 있습니까? 난 이미 데이터를 시도했다. 업데이트 전에 수락 변경,하지만 아무것도 작동합니다.

btw. 저장 메서드의 데이터 집합에 '올바른 값'이 있지만 업데이트 또는 삽입이 작동하지 않습니다. ...

이상한 점은 Load 메서드에서 데이터 집합의 필드를 변경하면 위의 예제에서 A 참고), 데이터가 올바르게 저장됩니다.

답변

0

전문가가 아니며 sqlite 등의 기본적인 지식이 있지만 문제는 데이터 집합을 저장 함수에 전달하여 어댑터가 원래 데이터 집합의 복사본을 사용하고 있다는 것입니다. 어댑터가 원본 데이터 세트를 처리하는 중로드 메소드에서 작동하는 이유는 무엇입니까?

다시 말하지만, 나는 이해할 수 없지만 이해하지 못하는 경우가 있습니다. 때로는 무식한 대답이 올바른 방향으로 나아가는 아주 좋은 시도입니다.

관련 문제