.net
  • sql
  • vb.net
  • 2012-12-19 176 views 2 likes 
    2
    cmSQL = New SqlCommand("UPDATE AdBanner SET AdBannerTitle='" & txTitle.Text & "',AdBannerFileUrl=/Images/'" & fileUpload.FileName & "',AdBannerTargerUrl='" & txTargetUrl.Text & "',AdBannerIsActive='" & chkBox.Checked & "' WHERE AdBannerID='" & lblBannerId.Text & "'", cnSQL) 
    

    错误:“/”附近的语法错误。“/”附近的语法错误

    我更新记录时

    +6

    使用的参数(http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlparameter.aspx),而不是CONCAT,看看SQL注入(http://en.wikipedia.org/wiki/SQL_injection) –

    +2

    [你不能注入!](http://imgs.xkcd.com/comics/exploits_of_a_mom.png) –

    +0

    而问题是? – tiago

    回答

    4

    /Images/之前,您必须把引号(')得到了错误。改变你的语句是:

    cmSQL = New SqlCommand("UPDATE AdBanner SET AdBannerTitle='" & txTitle.Text _ 
         & "',AdBannerFileUrl='/Images/" & fileUpload.FileName _ 
         & "',AdBannerTargerUrl='" & txTargetUrl.Text _ 
         & "',AdBannerIsActive='" & chkBox.Checked _ 
         & "' WHERE AdBannerID='" & lblBannerId.Text & "'", cnSQL) 
    

    而且,当你做完这些,我建议你开始约SQL Injection立即学习。这是一个简单但危险的安全隐患。

    +0

    个人而言,我会尝试避免SQL注入。 –

    +1

    @UweKeim是的,我即将添加到答案 –

    2

    The immediate问题是您没有为AdBannerFileUrl创建有效的文字;然而!目前你的做法是致命。请参阅“SQL注入”。你应该参数化,然后它变成:

    cmSql = new SqlCommand("UPDATE AdBanner SET [email protected],[email protected],[email protected],[email protected] WHERE [email protected]", cnSQL) 
    

    但是!然后,您必须添加参数为每个的:

    cmSql.Parameters.AddWithValue("@Title", txtTitle.Text); 
    cmSql.Parameters.AddWithValue("@FileUrl", "/Images/" + fileUpload.FileName); 
    cmSql.Parameters.AddWithValue("@TargetUrl", txTargetUrl.Text); 
    cmSql.Parameters.AddWithValue("@IsActive", chkBox.Checked); 
    cmSql.Parameters.AddWithValue("@ID", lblBannerId.Text); 
    
    1

    您的/Images/部分之前缺少',以便SQL Server获取SQL的格式不正确。

    但是,这样做服务器上的级联的基于SQL,在这个时代,是,说穿了,愚蠢的,使用未经验证的用户suplied值(如txTitle.Text)

    更好尤其是当方法是:

    cmSQL = New SqlCommand("UPDATE AdBanner SET [email protected]" _ 
        & ", [email protected]" _ 
        & ", [email protected]" _ 
        & ", [email protected]" _ 
        & " WHERE [email protected]", cnSQL) 
    cmSQL.CommandType = CommandType.Text; 
    
    cmSQL.Parameters.AddWithValue("@AdBannerTitle", txTitle.Text) 
    cmSQL.Parameters.AddWithValue("@AdBannerFileUrl", "/Images/" & fileUpload.FileName) 
    cmSQL.Parameters.AddWithValue("@AdBannerTargerUrl", txTargetUrl.Text) 
    cmSQL.Parameters.AddWithValue("@AdBannerIsActive", chkBox.Checked) 
    cmSQL.Parameters.AddWithValue("@AdBannerID", lblBannerId.Text) 
    
    0

    您的单引号放错了位置。

    你的代码必须是

    cmSQL = New SqlCommand("UPDATE AdBanner SET AdBannerTitle='" & txTitle.Text & "',AdBannerFileUrl='/Images/" & fileUpload.FileName & "',AdBannerTargerUrl='" & txTargetUrl.Text & "',AdBannerIsActive='" & chkBox.Checked & "' WHERE AdBannerID='" & lblBannerId.Text & "'", cnSQL) 
    
    相关问题