我使用 Microsoft ODBC for Oracle 驱动程序成功连接到 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)

请原谅部分复制的、有些伪代码。

有帮助吗?

解决方案

这里有点死灵术,但由于我刚刚遇到了类似的问题,以下是它如何与 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命令中
  • Parameters need no name, but position (and the correct type) are important

其他提示

ODBC 参数(用符号标记 ?) 受位置约束,因此您必须确保添加 OdbcParameters 按正确的顺序。他们的名字并不重要,但我建议 paramName, ,没有 @ 这是 SQL Server(或者更确切地说,Microsoft)特定的名称格式。

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

  • 代替 ? 经过 :paramName 在你的查询中。
  • 为您的参数命名 paramName.

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top