C#syntax'“+ stringName +”'

时间:2015-12-01 07:39:09

标签: c# sql asp.net string textbox

' " + 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')";

3 个答案:

答案 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   引号编码一个包含多个字符的字符串。不同的是   类似于单个整数和数组之间的差异   整数。