문제

Oracle 드라이버 용 Microsoft ODBC와 함께 Oracle 10G DB에 성공적으로 연결하고 있습니다.

매개 변수가없는 일반 쿼리는 잘 작동하지만 매개 변수화 된 쿼리는 매개 변수가 전달되지 않는 것처럼 작동합니다.

전.

--this works fine
Select * from tbl1 where column1 = 'test'

--this doesn't
select * from tbl1 where column1 = ?

--odbc string parameter 'test'

내 연결 문자열은 다음과 같습니다.

"Driver={Microsoft ODBC for Oracle}; " & _
 "CONNECTSTRING=(DESCRIPTION=" & _
 "(ADDRESS=(PROTOCOL=TCP)" & _
 "(HOST=" & pstrServer & ")(PORT=" & pintPort.ToString & "))" & _
 "(CONNECT_DATA=(SERVICE_NAME=" & pstrPhysicalName & "))); " & _
 "uid=" & pstrUserName & ";pwd=" & pstrPassword & ";"

그리고 다음과 같이 ODBC 명령에 매개 변수를 추가하고 있습니다.

arrOdbcParam(index) = New OdbcParameter("@paramName", paramValue)

...

cmd.Parameters.AddRange(arrOdbcParam)

부분적으로 복사 한 다소 pseuedo 코드를 용서하십시오.

도움이 되었습니까?

해결책

여기에서 약간의 네크로닝이지만 비슷한 문제로 어려움을 겪었 기 때문에 Centura SQLBase의 ODBC-Driver와 어떻게 작동했는지는 다음과 같습니다.

OdbcCommand com = con.CreateCommand();
com.CommandText = @"
  SELECT  thing
  FROM    table
  WHERE   searchInt = ? AND searchDat = ?";
com.Parameters.Add(new OdbcParameter("", OdbcType.Int)).Value = 12345;
com.Parameters.Add(new OdbcParameter("", OdbcType.DateTime)).Value = DateTime.Now;
OdbcDataReader reader = com.ExecuteReader();

이것은 "SearchInt"의 값 12345의 레코드와 "Sarachdat"의 날짜를 가진 "테이블"에서 검색합니다.
주목할만한 것 :

  • 매개 변수는 다음으로 표시됩니다 ? SQL 명령에서
  • 매개 변수는 이름이 필요하지 않지만 위치 (및 올바른 유형)가 중요합니다.

다른 팁

ODBC 매개 변수 (기호로 표시됩니다 ?) 위치별로 묶여 있으므로 추가해야합니다. OdbcParameter올바른 순서로 s. 그렇다면 그들의 이름은 중요하지 않지만 나는 제안합니다 paramName,없이 @ 이것은 SQL 서버 (또는 오히려 Microsoft) 특정 이름 형식입니다.

Oracle Driver 용 Microsoft ODBC에서 인식 해야하는 Oracle 매개 변수 형식을 사용하려고 시도 할 수 있으며 이름으로 바인딩 할 수 있습니다 (그러나 100% 확실하지 않음).

  • 바꾸다 ? ~에 의해 :paramName 쿼리에서.
  • 매개 변수의 이름을 지정하십시오 paramName.

"paramname"대신 ": paramname"을 사용해보십시오.

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