Pergunta

Eu estou conectando com sucesso a um Oracle 10g DB com um ODBC da Microsoft para Oracle motorista.

consultas regulares sem fina parâmetros de trabalho, mas consultas parametrizadas agir como se os parâmetros não estão recebendo passado.

ex.

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

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

--odbc string parameter 'test'

Aqui está o que a minha ligação da corda se parece com:

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

E eu estou adicionando parâmetros para o meu comando ODBC como esta:

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

...

cmd.Parameters.AddRange(arrOdbcParam)

Perdoe o partialy copiado, um pouco pseuedo código.

Foi útil?

Solução

Pouco de necromancing aqui, mas desde que eu só lutou com um problema semelhante, aqui é como ele trabalhou com o ODBC-driver para Centura SQLBase:

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();

Isto procura em "mesa" para registros com o valor 12345 em "searchInt" e data de hoje no "serachDat".
Coisas a nota:

  • Os parâmetros são marcados como ? na comando SQL
  • Parâmetros não precisa de nome, mas a posição (e o tipo correcto) são importante

Outras dicas

parâmetros ODBC (marcadas pelo símbolo ?) estão vinculados por posição, então você tem que certificar-se de que você adicionar os OdbcParameters na ordem correta. Seu nome é em seguida, sem importância, mas gostaria de sugerir paramName, sem a @ que é um SQL Server (ou melhor, Microsoft) formato de nome específico.

Você também pode tentar usar o formato do parâmetro Oracle, que deve ser reconhecido pelo ODBC da Microsoft para Oracle motorista e permitiria que você a ligação por nome em vez (não 100% de certeza sobre isso, embora):

  • Substitua ? por :paramName em sua consulta.
  • Nome do seu parâmetro paramName.

Tente usar ": paramName" em vez de "paramName".

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top