将参数与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命令
- 参数不需要名称标记为
?
, 但位置(和正确的类型)是 重要
答
ODBC参数(标记为?
)受位置约束,因此您必须确保按照正确的顺序添加OdbcParameter
。他们的名字是不重要的,但我会建议paramName
,而不是@
这是一个SQL Server(或,而不是微软)特定的名称格式。
您也可以尝试使用Oracle参数格式,它应该由Microsoft ODBC对Oracle驱动程序来识别并允许您通过名字绑定,而不是(不是100%肯定这一点,虽然):
- 在您的查询中用
:paramName
替换?
。 - 命名您的参数
paramName
。 necromancing这里的
找到了这个解决方案,它为我工作,为未来的访问者找到这个问题的一个笔记:我在我的where标准(其中mystring ='?')使用单个滴答声;你不需要它们。(请注意,提问者也没有使用它们。)(斯蒂芬,这实际上与你的答案没有任何关系) – 2012-05-10 15:02:29