2009-06-19 1 views
1

Visual Studio 2008 Pro 솔루션에서 .xsd 파일을 사용하고 있으며 tableadapter 메서드의 ExecuteMode 속성을 재설정하는 데 문제가 있습니다. 여러 어댑터에서 몇 가지 삽입 메서드를 만들었습니다. 새 레코드의 ID를 반환하려면 SQL 삽입 후에 "SELECT SCOPE_IDENTITY()"를 사용하십시오. 그런 다음 ExecuteMode 속성을 Scalar (NonQuery에서)로 업데이트합니다. 때때로 ExecuteMode가 NonQuery로 다시 변경된다는 것을 알게됩니다. 나는 이유를 알 수 없다. 나는 변화에 이르게하는 내 작업 동안의 패턴을 발견하지 못했다. 당신. 동료 .Net 괴짜는 어떤 아이디어라도 가지고 있습니까?TableAdapter의 메서드가 스칼라에서 NonQuery로 재설정 유지

+0

내게 귀하의 질의를 표시 할 수 있습니까 ??? –

+0

xsd에서 많은 삽입 쿼리가 발생했기 때문에 실제 쿼리가 문제라고 생각하지 않습니다. – Brian

답변

0

나는 이것을 VS의 버그 또는 부정확 한 환경 설정으로 표시했다. 나는 일어난 일을 일관성있게 반복 할 수 없었고 해결책을 찾지 못했습니다. 그것은 매우 무작위 적이기 때문에 나는 소수의 시간 이상으로 문제가 있다는 것을 기억하지 못합니다.

-1

값을 삽입하고 ID를 얻기 위해 스칼라 값을 반환하는 SQL 대신 새 레코드를 선택하는 SQL을 사용해야합니다.

"명령 유형 선택"단계에서 "새 저장 프로 시저 만들기"를 선택한 다음 "저장 프로 시저 선택을위한 SQL 문 입력"단계에서 "TableAdapter 구성 마법사"단계에서 "고급 옵션 "은"생성 삽입, 업데이트 ... "및"데이터 테이블 새로 고침 "을 표시합니다. 뉴스 절차의 이름으로 마법사의 나머지 부분을 완성하십시오.

생성 된 SQL은 TableAdapter가를 사용하여이

INSERT INTO [apptbl] ([Id]) VALUES (@Id); 
SELECT Id FROM apptbl WHERE (Id = SCOPE_IDENTITY()) 

같은 ...의 DataRow 개체가 있기 때문에 새로운 ID로 "어댑터에 의해"작성됩니다

public int insert_newObj() 
    { 
      objDataTable dt = new objDataTable(); 
      objRow dr = dt.NewObjRow();   

      // assign values to others fields, except the id... 

      dt.AddObjRow(dr); 

      Adapter.Update(dt); 

      return dr.Id; 
    } 

주입니다 두 번째 SQL 문 (SELECT ...)을 저장 프로 시저에 저장하십시오.

글쎄, 내가 당신의 SQL을 보지 못해 도움이 될지 모르겠다. 그러나 이것은 이드를 얻는 매우 일반적인 방법이다.