문제

저장된 쿼리 ( "UpdatePaid", 아래 그림과 같이 3 개의 매개 변수)를 통해 MSAccess 테이블과 일치하는 DataGrid 및 어댑터로 작업하고 있습니다.

    OleDbCommand odc = new OleDbCommand("UpdatePaid", connection);

    OleDbParameter param;

    odc.CommandType = CommandType.StoredProcedure;

    param = odc.Parameters.Add("v_iid", OleDbType.Double);
    param.SourceColumn = "I";
    param.SourceVersion = DataRowVersion.Original;

    param = odc.Parameters.Add("v_pd", OleDbType.Boolean);
    param.SourceColumn = "Paid";
    param.SourceVersion = DataRowVersion.Current;

    param = odc.Parameters.Add("v_Projected", OleDbType.Currency);
    param.SourceColumn = "ProjectedCost";
    param.SourceVersion = DataRowVersion.Current;

    odc.Prepare();

    myAdapter.UpdateCommand = odc;

    ...

    myAdapter.Update();

잘 작동합니다 ...하지만 정말 이상한 것은 그렇지 않았다 내가 넣을 때까지 ODC.prepare () 전화.

내 질문은 다음과 같습니다. OLEDB 저장 Procs/Queries와 함께 작업 할 때 항상 그렇게해야합니까? 왜요? 나는 또한 SQLDBCommand와 똑같은 일을해야 할 또 다른 프로젝트가 나오고 있습니다.

도움이 되었습니까?

해결책

이것을 이상하게도 준비된 진술이라고 불리며 실제로는 정말 좋습니다. 기본적으로 SQL 문 (삽입, 삭제, 업데이트)을 생성하거나 얻는 것은 어떻게 발생하고 실제 값을 전달하는 대신 "전달?" 장소 보유자로. 우리가 원하는 것은 "?"대신에 전달되는 가치라는 점을 제외하고는 모두 잘하고 좋습니다.

그래서 우리는 "?"대신에 진술을 준비합니다. 우리는 당신이 위에서 가지고있는 것처럼 매개 변수를 전달합니다.

준비 준비 문자열을 구문 분석하여 매개 변수가 물음표를 대체 할 수있는 위치를 찾으므로 매개 변수 데이터를 입력하고 명령을 실행하기 만하면됩니다.

OLEDB 내에서 저장된 쿼리는 준비된 진술이므로 준비가 필요합니다. 나는 SQLDB와 함께 저장된 쿼리를 사용하지 않았으므로 이전의 2 가지 답변을 연기해야합니다.

다른 팁

나는 sqldbcommand와 함께 사용하지 않습니다. 나에게 버그처럼 보인다 필수의. 그것은 단지 있어야합니다 가져서 좋다 절차를 여러 번 연속으로 호출하려는 경우. 어쩌면 내가 틀렸고이 전화를 너무 좋아하는 제공자에 대한 문서에 메모가있을 수 있습니다.

Jet OLEDB 제공 업체를 사용하고 있습니까? 또는 MSDASQL + JET ODBC?

전화 할 필요가 없습니다 Prepare(), 그러나 나는 그것이 드라이버/공급자의 종속이라고 생각합니다.

당신은 확실히 사용할 필요가 없습니다 Prepare() ~을 위한 System.Data.SqlClient.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top