' " + stringName + " '
在c#中的含义是什么?我想在编程中,如果你用引号括起来的东西,它将被视为字符串。一些细节将不胜感激,因为我刚开始学习c#
代码:
string sql_insertQuery = "INSERT into UserData(username,password,country) VALUES ('"+Usn.Text+"','lpxt','l.Text')";
Usn是文本框的ID,我现在只是测试,但我知道因为SQL注入而不建议输入这样的信息
编辑:我理解下面提供的有关连接的答案,但如果我使用
,为什么会出现错误string sql_insertQuery = "INSERT into UserData(username,password,country) VALUES ("+Usn.Text+",'lpxt','l.Text')";
仅限双引号
为什么使用单引号传递+ Usn.Text +作为输入字符串
string sql_insertQuery = "INSERT into UserData(username,password,country) VALUES ('+Usn.Text+','lpxt','l.Text')";
答案 0 :(得分:0)
在这种情况下," Usn" -Control中的文本将包含在您的SQL查询中。然而,查询中的字符串将被''
包围就像这个例子一样:
string stringVariable = "myString";
Console.WriteLine("'" + stringVariable + "'");
这里的输出将是:
<强>&#39; myString的&#39; 强>
注意输出是如何用单引号包围的。
答案 1 :(得分:0)
Usn.Text包含在一个单引号和一个双精度内 引号(单引号内的双引号)
此值仅包含 单引号,因为您的username
列是字符类型。
但是双引号用于这3个字符串的字符串连接;
"INSERT into UserData(username,password,country) VALUES ('"
Usn.Text
"','lpxt','l.Text')"
正如您所说,您应该始终使用parameterized queries。这种字符串连接对SQL Injection攻击开放。
编辑:我理解下面提供的关于连接的答案但是 如果我使用
,为什么会出现错误
你没有甚至告诉我们你得到了什么错误但是我假设你试图插入你的username
字符类型列,你必须使用单引用它。当然,如果您使用prepared statements,则可以跳过这些引号。
为什么使用单引号传递+ Usn.Text +作为输入字符串
因为当您撰写VALUES ('+Usn.Text+','lpxt','l.Text')"
时,您将+Usn.Text+
作为string literal插入,它不会插入Text
值,它会插入+Usn.Text+
作为Usn.Text = "foo";
一个字符串。
例如,如果foo
您将不插入+Usn.Text+
字符串,则会在这种情况下插入data/data/YOUR_PACKAGE
。
答案 2 :(得分:0)
plus运算符 用于 字符串连接。
可以在文档/指南中阅读更多内容
摘录自https://msdn.microsoft.com/en-us/library/ms228504.aspx:
连接是将一个字符串附加到结尾的过程 另一个字符串。连接字符串文字或字符串时 常量使用+运算符,t 编译器创建单个 string。没有运行时连接。但是,字符串变量 只能在运行时连接。在这种情况下,你应该 了解各种方法的性能影响。
编辑(因为问题已被编辑):
由于双qotes和+在qotes中,它们不会被编译器处理,因此可以作为字符串处理。所以你要将" + stringName + "
字面上添加到数据库中
可以在此处找到单个和双重qotes的一个很好的解释:
https://stackoverflow.com/a/602035/3948598
单引号编码单个字符(数据类型char),而double 引号编码一个包含多个字符的字符串。不同的是 类似于单个整数和数组之间的差异 整数。