asp Driver 와 Provider 두 연결 문자열 이 Access 를 연결 할 때의 차이

뉴스 를 추가 하 는 중 오류 가 발생 했 습 니 다.다음은 오류 알림 입 니 다.Microsoft OLE DB Provider for ODBC Drivers 오류'80040 e21'다단 계 OLE DB 작업 에 오류 가 발생 했 습 니 다.가능 하 다 면 OLE DB 마다 상태 값 을 확인 하 세 요.일이 완성 되 지 않 았 다.이러한 오류 가 발생 한 이 유 는 access 연결 문자열 을"Driver={Micorsoft Access Driver()}로 수 정 했 기 때 문 입 니 다.dbq="&Server.Mappath(DbPath),원래 연결 문자열 은"Provier=Microsoft.Jet.OLEDB.4.0;Data source="&Server.Mappath(DbPath)에 서 는 이러한 오류 가 발생 하지 않 습 니 다.보아하니 이 두 가지 access 데이터 베 이 스 를 연결 하 는 방식 은 여전히 어느 정도 차이 가 있 는 것 같다.적어도 뒤의 연결 방식 은 잘못 사용 하 는 것 이 좋 지만 규범 상 으로 는 그다지 정규 적 이지 않다 는 것 이 분명 하 다.간단하게 서술 하기 위해 서,나 는 이 두 가지 방식 을 각각 provider 연결 과 driver 연결 이 라 고 부른다.이런 오 류 는 뉴스 를 수정 할 때 는 나타 나 지 않 는 다.코드 를 보 니 추 가 를 실행 할 때 Excute 로 얻 은 기록 집합 이 닫 히 지 않 았 습 니 다.내 가 닫 아 도 제대로 실행 이 안 돼.그래서 나 는 코드 를 썼 고 간단 한 표를 따로 설계 했다.이때 두 가지 연결 방법 을 추가 할 수 있다 는 것 을 발견 했다.그래서 나 는 이 코드 중의 시 계 를 원래 의 것 으로 바 꾸 었 지만 실행 할 수 없 었 다.설마 시계 와 관련 이 있 단 말 인가?그래서 나 는 표를 자세히 연구 하기 시 작 했 는데 원래 표 에 자동 번호 필드 가 프로그램 에서 할당 되 었 다 는 것 을 발견 했다.자동 번 호 는 할당 되 어 서 는 안 되 는 걸 로 알 고 있 습 니 다.그래서 나 는 그 시계의 자동 번 호 를 가 져 갔 는데,결 과 는 정상적으로 실 행 될 수 있 었 다.Provider 방식 으로 연결 하면 자동 번호 필드 에 값 을 부여 할 수 있 을 것 같 습 니 다.다음은 다른 곳 의 차 이 를 말씀 드 리 겠 습 니 다.내 가 driver 로 연결 할 때 채널 설정 에 Null 값 이 나 타 났 지만 사실은 데이터베이스 에 값 이 있 었 다.나 는 이 필드 의 데이터 형식 을 보 았 는데 비고 이다.그럼 드라이버 구동 이 긴 메모 에 대한 지원 도 좋 지 않다 는 거 죠?설마,내 신문 표 의 뉴스 내용 은 틀림없이 비고 가 있 을 거 야.이 방면 의 원인 은 아 닐 거 야.어떤 이유 일 까요?설마 그 가 다른 비고 뒤에 있 기 때 문 일 까?근 데 뉴스 시트 에 도 두 개의 비고 가 있 고 내용 비고 도 프로필 비고 뒤에 있 잖 아 요.이런 의심 도 배제 됐다.이 필드 에 키워드 가 있어 서 그런 가?나 는 이 필드 값 을 1 로 바 꾸 었 는데,결과 도 잘못 되 었 다.그것 은 어떤 방면 의 원인 입 니까?차라리 한 페이지 를 더 써 서 테스트 코드 는 다음 과 같다.테스트 코드 는 다음 과 같다
 
dim conn
set conn=server.createobject("adodb.recordset")
conn.open "driver={Microsoft access driver (*.mdb)};dbq=" & server.mappath("data/dd.mdb") 'driver
'conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data/dd.mdb") 'provider
set rs=conn.execute("select * from s_channel where channelID=11")
response.Write rs("UploadSetting")
rs.close
set rs =nothing
두 가지 연결 이 정상적으로 출력 되 는 것 을 발견 하면.그래서 나 는 원래 코드 가 열 린 기록 집합 에서 출력(response.write)을 해 보 았 는데 그 위치 에서 이 필드 의 값 을 정상적으로 출력 할 수 있 음 을 발견 했다.그래서 저 는 출력 코드 를 계속 아래로 이동 시 켰 습 니 다.마지막 으로 다음 과 같은 코드 세 션 으로 이동 하 였 습 니 다
 
if IsNull(rs("UploadSetting")) or rs("UploadSetting")="" then
UploadSetting=Split("1,2,3,4@Other@2@0@jpg|gif|bmp|png@100@1@swf@500@1@rm|mp3|wav|mid|avi|mpg|mpeg|asf|wma@2048@1@rar|zip|exe|doc|xls|chm@2048@1","@")
else
UploadSetting=Split(rs("UploadSetting"),"@")
end if
if 위 에 올 려 놓 으 면 정상적으로 출력 할 수 있 지만 else 뒤에 놓 으 면 Null 을 출력 하 는 이 유 는 무엇 입 니까?따라서 최종 테스트 코드 는 다음 과 같다.다음은 테스트 코드 이다
 
dim conn
set conn=server.createobject("adodb.recordset")
conn.open "driver={Microsoft access driver (*.mdb)};dbq=" & server.mappath("data/dd.mdb") 'driver
'conn.open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & server.mappath("data/dd.mdb") 'provider
set rs=conn.execute("select * from s_channel where channelID=11")
response.Write rs("UploadSetting")
if IsNull(Rs("UploadSetting")) or rs("UploadSetting")="" then
response.Write "dd"
else
response.Write rs("UploadSetting")
end if

rs.close
set rs =nothing
이상 코드 는 provider 방식 으로 연결 할 때 rs("upload Setting")의 값 을 정확하게 출력 할 수 있 고 Driver 방식 에 서 는 아무것도 출력 하지 않 는 다.우 리 는 이렇게 이해 할 수 있 습 니까?즉,Driver 방식 에서 비고 내용 에 대한 인용 은 한 번 만 있 을 수 있 고 다시 인용 할 때 NULL 값 으로 변 합 니 다.Provider 는 이런 일이 없 을 것 이다.이런 상황 에 대한 적응 은 하나의 변 수 를 통 해서 만 가능 하 다.주석 필드 의 내용 을 직접 인용 하 는 것 이 아니 라 변 수 를 먼저 주 십시오.

좋은 웹페이지 즐겨찾기