Oracle ODBC 연결이있는 매개 변수 사용
문제
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"을 사용해보십시오.
제휴하지 않습니다 StackOverflow