将参数与Oracle ODBC连接使用

问题描述:

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

不带参数定期查询做工精细,但如果这些参数都没有得到传入的参数化查询行事。

前。

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

原谅partialy复制,有些pseuedo代码。

位,但因为我只是一个类似的问题挣扎,这里是它如何与ODBC驱动程序进行的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(); 

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

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

找到了这个解决方案,它为我工作,为未来的访问者找到这个问题的一个笔记:我在我的where标准(其中mystring ='?')使用单个滴答声;你不需要它们。(请注意,提问者也没有使用它们。)(斯蒂芬,这实际上与你的答案没有任何关系) – 2012-05-10 15:02:29

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

+0

我的参数名称通常是@paramName。是:paramName是一个Oracle语法?我通常更多地使用SQL Server,所以我对Oracle语法的一些变体是新手的。 – Gaidin 2009-05-01 14:28:35

+0

仍然不能使用:paramName – Gaidin 2009-05-01 14:30:39

ODBC参数(标记为?)受位置约束,因此您必须确保按照正确的顺序添加OdbcParameter。他们的名字是不重要的,但我会建议paramName,而不是@这是一个SQL Server(或,而不是微软)特定的名称格式。

您也可以尝试使用Oracle参数格式,它应该由Microsoft ODBC对Oracle驱动程序来识别并允许您通过名字绑定,而不是(不是100%肯定这一点,虽然):

  • 在您的查询中用:paramName替换?
  • 命名您的参数paramName。 necromancing这里的
+0

刚刚尝试过这一点,但它仍然无效。我不断收到“并非所有变量都受到约束”。 – Gaidin 2009-05-07 15:35:11

+0

对于Oracle,您不能使用Microsoft ODBC的命名参数。该参数必须使用“?”指定并以正确的顺序添加参数。尝试使用AddWidthValue(“”,paramValue)而不是AddRange()。 – Liao 2009-12-16 07:59:09