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的语法?什么意思啊?
这句语句最后是不是多了个'为什么编译通过的呢?
还有一个问题
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的语法?什么意思啊?
下面是参数化查询
VALUE(后面少了一个引号。因为是拼接字符串,只要字符串合法VS就能编译通过,VS并不会检查SQL语法,只有在调试运行时才会报SQL语法错误。
这loginname前面为什么要+个@呢,这是sql的语法?什么意思啊?
前面加@符号代表loginname是一个参数,之所以这么做而不用字符串拼接是为了防止SQL注入式攻击,如果是字符串拼接的SQL语句,对于了解SQL语法的用户来说,不知道密码就可以登录。而使用参数的话就可以有效防止注入式攻击。
下面的是参数化语句,也就是可以说是简单的存储过程,使用参数化好处楼上已说了