strSQL = "SELECT * FROM users WHERE (name = '" + userName + "') and (pw = '"+ passWord +"');"
不可以写成:
strSQL = "SELECT * FROM users WHERE (name = '" userName "') and (pw = '"passWord"');"
可不可以去掉加号??
不可以。
这里的“+”是组装字符串的一个行为,这里的字符串组成部分中有几个是来自别的地方(变量),所以必须保持,除非你使用替代方案(荒野的呼唤说的使用格式化处理)。
另外,如果你想真的去掉,也可以,那就用另外的方案,把SQL写成:
strSQL = "SELECT * FROM users WHERE (name = @userName) and (pw = @passWord);"
这样,你就必须通过SQLPARAMETER的方式,把USERNAME和PASSWORD的具体内容传递进去。
建议你使用参数的方式,因为这样安全,避免了SQL注入(什么是SQL注入,你可以百度搜索一下)的危险。
我知道参数化查询,上面是我最开始看到的一个,有点小疑问。就问问。
还有:
strSQL = "SELECT * FROM users WHERE Name = @Name and Password = @Password";
SqlParamter[] paras = new SqlParamter[]
{//参数数组
new SqlParamter("@Name",SqlDBType.Varchar,50)
new SqlParamter("@Password",SqlDBType.Varchar,50)};
5 paras[0].value = userName;//绑定用户名
6 paras[1].value = password;//绑定用户密码
new SqlParamter("@Name",SqlDBType.Varchar,50)这个怎么理解??
@战神@冰王子:
SqlDBType.Varchar:是说这个绑定的参数类型对应于SQL里的VARCHAR
50:既然知道了Varchar的意思,这个知道了吧?长度。
当你new Sqlparameter(...)的时候,你会看到提示的。
可以用string.Format()。
string sql = string.Format("select a.[YsKinds],a.[bzr] ,b.name from tableA as a left join tableB as b on a.yskinds = b.id where [bianhao] =@bianhao and [category] =@category order by b.id ASC");
SqlParameter[] para = new SqlParameter[]
{
new SqlParameter("@bianhao",SqlDbType.Int,4),
new SqlParameter("@category",SqlDbType.Int,4)
};
int i = 0;
para[i++].Value = Id;
para[i++].Value = Category;
用参数化的SQL
刚才在sql2008中试了一下,都可以的,我个人觉得加上+号是为了保持语句的连贯吧,在其他语句中参数也都是用+号来拼接的