string Sql = "insert into [users] (s_no,name,pwd,email,qqmsn,phone) values (" + stuno + "','" + name + "','" + pwd + "','" + email + "','" + qqmsn + "','" + phone + "')";
这句语句最后是不是多了个'为什么编译通过的呢?
还有一个问题
 public int adminLogin(string loginName, string loginPwd)
    {
        OleDbConnection myConn = GetConnection();
        OleDbCommand myCmd = new OleDbCommand("select count(*) from admin where name=@loginName and pwd=@loginPwd", myConn);
        myCmd.Parameters.Add(new OleDbParameter("@loginName", OleDbType.VarChar, 20));
        myCmd.Parameters["@loginName"].Value = loginName;
        myCmd.Parameters.Add(new OleDbParameter("@loginPwd", OleDbType.VarChar, 50));
        myCmd.Parameters["@loginPwd"].Value = loginPwd;
        myConn.Open();
        int i = (int)myCmd.ExecuteScalar();
        myCmd.Dispose();
        myConn.Close();
        return i;
    }
这loginname前面为什么要+个@呢,这是sql的语法?什么意思啊?

解决方案 »

  1.   

    上面 的是拼SQL语句
    下面是参数化查询
      

  2.   

    string Sql = "insert into [users] (s_no,name,pwd,email,qqmsn,phone) values ('" + stuno + "','" + name + "','" + pwd + "','" + email + "','" + qqmsn + "','" + phone + "')";
    VALUE(后面少了一个引号。因为是拼接字符串,只要字符串合法VS就能编译通过,VS并不会检查SQL语法,只有在调试运行时才会报SQL语法错误。
    这loginname前面为什么要+个@呢,这是sql的语法?什么意思啊?
    前面加@符号代表loginname是一个参数,之所以这么做而不用字符串拼接是为了防止SQL注入式攻击,如果是字符串拼接的SQL语句,对于了解SQL语法的用户来说,不知道密码就可以登录。而使用参数的话就可以有效防止注入式攻击。
      

  3.   

    多了个'么?我怎么没看到? 用单引号的是表示string类型数据,不用的是数字类型数据
    下面的是参数化语句,也就是可以说是简单的存储过程,使用参数化好处楼上已说了