SqlParamter用法

    这几天在Sql命令中嵌入变量,用SqlParameter数组传值,代码如下:

 ''' <summary>
    ''' 增加卡信息函数
    ''' </summary>
    ''' <param name="card">实体类</param>
    ''' <returns>返回Boolean类型,是否添加成功</returns>
    ''' <remarks></remarks>
    Public Function AddCard(card As CardEntity) As Boolean Implements ICard.AddCard

        Dim strSQL As String   'Sql字符串
        Dim i As Integer    '受影响的行数
        Dim Addresult As Boolean


        '参数集合
        Dim param As SqlParameter()
        param = New SqlParameter() {
                                    New SqlParameter("@strstudentID", card.studentID),
                                    New SqlParameter("@strcardNo", card.cardNo),
                                   New SqlParameter("@strcardCash", card.cardCash),
                                   New SqlParameter("@strhandlers", card.handlers),
                                   New SqlParameter("@strstate", card.state),
                                   New SqlParameter("@strisCheck", card.isCheck),
                                   New SqlParameter("@strcardDate", card.cardDate),
                                    New SqlParameter("@strcardTime", card.cardTime)
                                   }

        '增加数据语句
        strSQL = "insert into T_Card(studentID,cardNo,cardCash,handlers,state,isCheck,cardDate,cardTime)" & "values(@strstudentID,@strcardNo,@strcardCash,@strhandlers,@strstate,@strisCheck,@strcardDate,@strcardTime)"


        '用Sqlhelper类

        i = SqlHelper.DBSqlhelper.ExccuteNoQuery(strSQL, CommandType.Text, param)

        If i > 0 Then
            Addresult = True
        End If

        Return Addresult
    End Function

    运行了半天死活不行,仔细看一下提示:位置0处没有任何行



调试了一下,发现SQL语句写的参数不对应,修改好了,又出现问题了。

      

提示:参数化查询,未提供该参数



    

    经查询是没有给参数赋值。从这也证明了Sqlparameter的参数集合中的参数必须要都写上才能执行。证明了Sqlparameter的防注入,很好用,只要一个参数集合就可以把所有参数传递进去。


    在U层给实体赋值:

        '卡实体赋值
        Dim card As New Entity.CardEntity
        card.cardNo = txtCardno.Text
        card.cardCash = txtCash.Text
        card.state = txtState.Text
        card.studentID = txtStudentID.Text
        card.handlers = "Liu"
        card.isCheck = "未结账"
        card.cardDate = Now
        card.cardTime = Now


    总结:SqlParameter给我们提供了一个很好的类,有了它,我们可以不现拼接字符串,也可以不再担心单引号带来的惨剧,这样可以最大限度的避免注入问题。sql注入存在的最大危害是sql的执行语句没有和控制语句分开,我们想要select一些东西,但用户可能拼出 'or 1=1甚至再加上控制语句,所以要避免sql的注入,就必须把查询的语句与控制语句分开。Sqlparameter给我们提供了方便。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 11
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值