我正在使用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)
原谅那些被复制的,有些过时的代码。
答案 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”。