黑马程序员技术交流社区

标题: 求解释 相信初学者也有同样的问题 [打印本页]

作者: 苏波    时间: 2013-1-16 15:29
标题: 求解释 相信初学者也有同样的问题
本帖最后由 张文 于 2013-1-16 16:47 编辑

cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";
谁帮我解释下这错综复杂的 引号 之间的关系
作者: 许庭洲    时间: 2013-1-16 15:51
1.SqlCommand表示向服务器提交的一个命令;
2.CommandText属性为要执行的SQL语句;
3.ExecuteNonQuery方法执行一个非查询语句(Update, Insert, Delete等);
4.例如:
   using(SqlCommand cmd = conn.CreateCommand())
  {
       //username 和password在数据库中定义的是一个varchar型的,而对字符型进行条件查询的时候是要加''号的,而+用于字符拼接 。
        cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";//
       //上面语句可换成cmd.CommandText="Insert into T_Users(UserName,Password) values('admin','888888')";
        cmd.ExecuteNonQuery();
}
作者: 黑马刘俊    时间: 2013-1-16 16:15
本帖最后由 黑马刘俊 于 2013-1-16 16:20 编辑

cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";

分解下理解比较好

首先  cmd.CommandText = "                                      "   表示命令对象所要在执行的sql语句,这个sql语句是通过字符串参数赋给CommandText属性的。

假设username = 'aaa',password = 'bbb'

那么实际上我们执行的sql语句是   insert into T_Users1(UserName,Password) values ('aaa','bbb')

下面通过字符串连接来构造这条语句

insert into T_Users1(UserName,Password) values ( '  '  '    =    insert into T_Users1(UserName,Password) values ('

+username                                                     =     insert into T_Users1(UserName,Password) values ('username

+"    ','      "                                            =     insert into T_Users1(UserName,Password) values ('username','

+password                                                     =     insert into T_Users1(UserName,Password) values ('username','password

+ "  ')   "                                                =      insert into T_Users1(UserName,Password) values ('username','password')

我是这样理解的,把',' 当成一个字符串,不要理解为用单引号包裹了一个逗号,实际上我不知道这样写行不行,如果需要使用字符串连接来构造sql语句,最好写成这样,不要嵌套使用单双引号,容易犯错,而且很难找到错误

cmd.CommandText = "insert into T_Users1(UserName,Password) values ( "   +    "  '  "   +  " ,"  + "  ' " + password + " ' " + " ) "

不过最好推荐用string.format()函数来构造比较容易看懂,或者参数化查询也行。

我也是新手,有错误的地方欢迎指出,大家一起学习。
作者: 苏波    时间: 2013-1-16 16:52
conan198581 发表于 2013-1-16 15:59
这种写法,字段少还无所谓了,建议使用string.format,使用占位符,来的比较方便!!
cmd.CommandText = st ...

用占位符我 知道 我是想弄明白我说的那种方式
作者: 苏波    时间: 2013-1-16 17:02
黑马刘俊 发表于 2013-1-16 16:15
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')"; ...

谢谢 你解答 受用了
作者: 九木    时间: 2013-1-16 20:58
SQL语句为字符串,在sql中字符串又需要用单引号括起来
那么你需要在sql语句当中当作字符串的值就需要用单引号括起来,字符串拼接变量要用+号,所以需要把+号也括在里面


"sql语句'"+字符串变量+"'后面的sql语句"
其实就是把单引号也作为c#里面的字符串就行了,那两个+号就是用来拼接字符串的;



作者: 郑朝明    时间: 2013-1-17 10:15
本帖最后由 ™郑老 于 2013-1-17 10:43 编辑

楼上正解。简单明了。老鸟们都不这样搞了听说有漏洞,都用@变量
再用Parameters.Add()方法
作者: 罗志强    时间: 2013-1-17 13:52
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";
我勒个去   不仔细看还真会被忽悠了   原来还有单引号啊

外面包着一对大引号 "---- insert into T_Users1(UserName,Password) values ('---"+username+"----','-----"+password+ "-----')----"
这样看会清楚些   外面一对    然后'---"+username+"----'   单引号包括双引号   

他们的关系就是   双单双   就这么简单
作者: 苏波    时间: 2013-1-17 21:40
ShowStyle 发表于 2013-1-17 13:52
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')"; ...

看明白了谢谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2