在VB2008 速成版中使用参数化SQL查询语句无效

  最近刚学会在VB2008 中使用参数化SQL语句,于是马上用到代码中,却碰到查不到任何数据的情况,纠结了好几天,还是没有搞明白,差点吐血。不得已还是先在代码中使用字符串拼接的SQL语句。

  包含参数化SQL语句的代码如下:

            Dim cmSl As New OleDbCommand("select * from PENA where VSL_VOY=@vsl_voy and POD"+ _                                                                                                                                 "LIKE @pod ",dbCon)

            Dim paPOD As New OleDbParameter("@pod", OleDbType.VarChar)
            Dim paVSL_VOY As New OleDbParameter("@vsl_voy", OleDbType.VarChar)
            
            paPOD.Value = IIf(Me.TextBoxPOD.Text.Length = 0, "%", Me.TextBoxPOD.Text.Trim.ToUpper)
            paVSL_VOY.Value = Me.TextBoxVSL_VOY.Text.Trim.ToUpper

 

            cmSl.Parameters.Add(paVSL_VOY)
            cmSl.Parameters.Add(paPOD)

           

看起来没有任何错误,执行后就是没有任何结果!

然后把参数 paPOD 或者 paVSL_VOY去掉一个,即去掉

            cmSl.Parameters.Add(paVSL_VOY) 或
            cmSl.Parameters.Add(paPOD)

其中一个,SQL语句改成

 

select * from PENA where VSL_VOY=@vsl_voy 或者

select * from PENA where POD=@pod

 

也就是只让一个参数起作用,执行后都有结果!

 

把参考书翻来翻去也没有找到结果。

 

几天后上MSDN查看OleDbCommand.Parameters 集合的说明,终于找到了答案!原话是这样的:

The OLE DB .NET Provider does not support named parameters for passing parameters to an SQL Statement or a stored procedure called by an OleDbCommand when CommandType is set to Text. In this case, the question mark (?) placeholder must be used

 

也就是说,满足以下几个条件:

1、使用OLEDB.NET provider

2、由OledbCommand对象执行SQL语句或存储过程

3、执行的语句是文本类型

那么在参数化SQL语句中不能使用有名字的参数,而必须用?号代替参数。?号出现的顺序必须与添加到Parameters集合中的参数的顺序一致。我原来的代码完全符合这三个条件,怪不得要出问题。

 

几天的纠结总算化解。谢天谢地。

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值