A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 苏波 高级黑马   /  2013-1-16 15:29  /  1800 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张文 于 2013-1-16 16:47 编辑

cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";
谁帮我解释下这错综复杂的 引号 之间的关系

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

8 个回复

倒序浏览
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();
}

评分

参与人数 1技术分 +1 收起 理由
张文 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 黑马刘俊 于 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()函数来构造比较容易看懂,或者参数化查询也行。

我也是新手,有错误的地方欢迎指出,大家一起学习。

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
conan198581 发表于 2013-1-16 15:59
这种写法,字段少还无所谓了,建议使用string.format,使用占位符,来的比较方便!!
cmd.CommandText = st ...

用占位符我 知道 我是想弄明白我说的那种方式
回复 使用道具 举报
黑马刘俊 发表于 2013-1-16 16:15
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')"; ...

谢谢 你解答 受用了
回复 使用道具 举报
SQL语句为字符串,在sql中字符串又需要用单引号括起来
那么你需要在sql语句当中当作字符串的值就需要用单引号括起来,字符串拼接变量要用+号,所以需要把+号也括在里面


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


评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 ™郑老 于 2013-1-17 10:43 编辑

楼上正解。简单明了。老鸟们都不这样搞了听说有漏洞,都用@变量
再用Parameters.Add()方法

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')";
我勒个去   不仔细看还真会被忽悠了   原来还有单引号啊

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

他们的关系就是   双单双   就这么简单

评分

参与人数 1技术分 +1 收起 理由
潘梦军 + 1

查看全部评分

回复 使用道具 举报
苏波 高级黑马 2013-1-17 21:40:12
9#
ShowStyle 发表于 2013-1-17 13:52
cmd.CommandText = "insert into T_Users1(UserName,Password) values ('"+username+"','"+password+ "')"; ...

看明白了谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马