在过去的两个小时里,我试图弄清楚为什么参数不能被绑定(我知道我没有使用" using“块。我知道System.Data.OracleClient已经被弃用了。)请帮我看看下面的代码有什么问题:
Dim nCount As Integer
sSQL = " SELECT COUNT(*) FROM USERS WHERE USER_ID = :UID "
Dim conn As OracleConnection = New OracleConnection(ConfigurationSettings.AppSettings("connString"))
conn.Open()
Dim cmd As OracleCommand = New OracleCommand(sSQL, conn)
cmd.CommandType = CommandType.Text
With cmd
.Parameters.Add(New OracleParameter(":UID", txtUserID.Text))
End With
Try
nCount = cmd.ExecuteScalar()
Catch ex As Exception
End Try
我已经尝试了我在网上能找到的所有变体:在Parameters.Add中加冒号或不加冒号,添加或AddWithValue,添加括号或创建一个新的OracleParameter对象,然后添加it...Nothing似乎可以。
但是如果我只是在查询中硬编码USER_ID,删除parameter.Add,它将返回一个值。
发布于 2013-07-03 07:26:02
对我来说,在尝试不同的组合时,你似乎错过了一些东西。
这个变种必须工作:
Dim nCount As Integer
sSQL = "SELECT COUNT(*) FROM USERS WHERE USER_ID = :UID"
Dim conn As OracleConnection = New OracleConnection(ConfigurationSettings.AppSettings("connString"))
conn.Open()
Dim cmd As OracleCommand = New OracleCommand(sSQL, conn)
cmd.CommandType = CommandType.Text
cmd.Parameters.Add("UID", OracleType.VarChar).Value = txtUserID.Text
nCount = cmd.ExecuteScalar()
请试试看。
发布于 2013-07-02 20:42:10
哈哈!
UID
实际上是Oracle中的保留字。将UID
变量更改为非保留字。
发布于 2013-07-03 11:11:53
帮你自己一个忙,至少看看来自Oracle的ODP。你会需要它的,微软终于在它的OracleClient上拉了加号。切换到ODP非常容易。
在您的情况下,我会省略参数名。不管怎么说,你是通过位置绑定的。
在Microsoft实现中,SQL语法也略有不同。使用?作为每个占位符。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparameter.aspx。
https://stackoverflow.com/questions/17435113
复制相似问题