在过去的2个小时里,我一直想弄清楚为什么参数无法绑定(我知道我没有使用“使用”块。我知道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,Add或AddWithValue中有或没有冒号,在括号中添加或创建一个新的OracleParameter对象然后添加它......似乎没什么用。
但是,如果我只是在查询中对USER_ID进行硬编码,请删除parameter.Add,它会返回一个值。
答案 0 :(得分:3)
HA!
UID
实际上是Oracle中的保留字。将您的UID
变量更改为非保留字。
答案 1 :(得分:1)
对我来说,似乎你错过了一些东西,同时尝试了不同的组合。
此变体必须有效:
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()
请试一试......
答案 2 :(得分:0)
帮自己一个忙,至少从Oracle看ODP。你需要它与微软最终在其OracleClient上取得优势。切换到ODP非常容易。
在你的情况下,我会省去参数名称。无论如何,你的位置都是有约束力的。
SQL语法在Microsoft实现中也略有不同。用一个 ?充当每个占位符。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.data.oracleclient.oracleparameter.aspx。