StrSql = "select  * from [WIN_ANNOUNCEMENT] where [WIN_ANN_TITLE]=@AnnTitle and [WIN_ANN_ID]<>@AnnId";
            Anntitle = new SqlParameter("@AnnTitle", SqlDbType.NVarChar, 50);
            Anntitle.Value = Convert.ToString(anntitle);
            Annid = new SqlParameter("@AnnId", SqlDbType.NVarChar, 36);
            Annid.Value = Convert.ToString(annid);
我想问一下,这样写安不安全,有没有SQL注入的可能,怎样设置这些参数使其不为空

解决方案 »

  1.   

    这样写是安全的
    因为你用的是参数
    理论上不存在 SQL注入
    现在一般都用存储过程和你上面的那种方法来防止SQL注入
      

  2.   

    设置不为空
    需要你在前台控制以下了
     用.NET自带验证控件
      

  3.   

    你设置了SqlDbType.NVarChar就不会为空了
      

  4.   

    我这里还遇到一个问题那就是"做带@参数的搜索的时候,应该怎么做"like '%@str%'我这样写好像搜索不到,值为空
      

  5.   


    like '%"@str"%' 
      

  6.   

    like '%"@str"%' 
      

  7.   

    这样好像不行吧 这样好像把@str看成一个整体的参数了啊是否少加了引号""
    like '%""@str""%' 
      

  8.   

    防注的两点:
    1 验证类型,是数字要验证,是字符要加 name=''分号
    2 变量里不能有'