将参数与Oracle ODBC连接一起使用

时间:2009-05-01 13:59:44

标签: vb.net oracle odbc

我正在使用Microsoft ODBC for Oracle驱动程序成功连接到Oracle 10g数据库。

没有参数的常规查询可以正常工作,但参数化查询的作用就好像没有传入参数一样。

离。

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

原谅那些被复制的,有些过时的代码。

3 个答案:

答案 0 :(得分:5)

这里有一些坏消息,但由于我只是遇到了类似的问题,以下是它如何使用Centura SQLBase的ODBC驱动程序:

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

在“table”中搜索“searchInt”中值为12345的记录,在“serachDat”中搜索今天的日期。
注意事项:

  • 参数在中标记为? SQL命令
  • 参数不需要名字, 但是位置(和正确的类型)是 重要

答案 1 :(得分:2)

ODBC参数(由符号?标记)受位置限制,因此您必须确保以正确的顺序添加OdbcParameter。他们的名字然后不重要,但我建议paramName,而不是@,这是一个SQL Server(或更确切地说是Microsoft)特定的名称格式。

您也可以尝试使用Oracle参数格式,该格式应该由Microsoft ODBC for Oracle驱动程序识别,并允许您通过名称进行绑定(尽管不是100%确定):

  • 在查询中将?替换为:paramName
  • 为参数命名paramName

答案 2 :(得分:1)

尝试使用“:paramName”而不是“paramName”。