C#newbie字符串连接问题

时间:2011-08-06 22:40:01

标签: c# string concatenation

我正在处理的项目中有以下代码:

foreach(DataTable myTable in myDataSet.Tables)
{
string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = "'" + myTable.TableName + "'"
MessageBox.Show(sSQL);
}

由于某种原因,第二个撇号(')没有被添加到字符串中。事实上,我尝试在myTable.TableName之后追加的任何内容都不会被追加。如果我用表的名称替换myTable.TableName,它就可以了!如果我使用变量,并将其设置为表名,它也可以工作!

谁能告诉我这里我做错了什么?

感谢您的任何信息!

10 个答案:

答案 0 :(得分:2)

这甚至不会编译,你在第一个撇号之前结束字符串。

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'"

答案 1 :(得分:1)

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'";

请注意,此代码对SQL注入是开放的,这是一个巨大的安全问题...... 更好地使用带参数的查询!

答案 2 :(得分:1)

要在“字符串内放置一个你需要在之前添加一个转义字符:\”

答案 3 :(得分:1)

你有太多"

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = "'" + myTable.TableName + "'"

应该是

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'"

为什么不使用像LINQ这样的实体框架?

答案 4 :(得分:0)

您的字符串应如下所示:

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'";

答案 5 :(得分:0)

试试这个。

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'";

答案 6 :(得分:0)

双引号太多。

您可以尝试这样做以便于阅读:

string sSQL = string.Format("SELECT `Name` FROM _Columns WHERE `Table` = '{0}'", myTable.TableName)

应该完成同样的事情。

答案 7 :(得分:0)

它没有被添加,因为你正在结束之前的字符串。

看一下string.Format作为构造字符串的另一种方法。

正如其他人所说的那样,tat代码甚至不应该编译。

答案 8 :(得分:0)

其他人已经回答了这个问题,但除了这些答案之外,为此更容易使用string.Format

var sSQL = string.Format("Select 'Name' FROM _Columns WHERE 'Table' = '{0}'", myTable.TableName);

答案 9 :(得分:0)

在我看来,您应该避免在代码中构建连接的SQL字符串。这样的事情就是邪恶的。

但是,如果必须,请尝试这样的事情:

foreach(DataTable myTable in myDataSet.Tables)
{
    string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + 
                       myTable.TableName.Replace("'", "''") + "'";
    MessageBox.Show(sSQL);
}