C# C新手字符串连接问题

C# C新手字符串连接问题,c#,string,concatenation,C#,String,Concatenation,我正在从事的项目中有以下代码: foreach(DataTable myTable in myDataSet.Tables) { string sSQL = "SELECT `Name` FROM _Columns WHERE `Table` = "'" + myTable.TableName + "'" MessageBox.Show(sSQL); } 出于某种原因,字符串中没有添加第二个撇号。事实上,我试图在myTable.TableName之后追加的任何内容都不会被追加。如果我用一个表

我正在从事的项目中有以下代码:

foreach(DataTable myTable in myDataSet.Tables)
{
string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = "'" + myTable.TableName + "'"
MessageBox.Show(sSQL);
}
出于某种原因,字符串中没有添加第二个撇号。事实上,我试图在myTable.TableName之后追加的任何内容都不会被追加。如果我用一个表的名称替换myTable.TableName,它会工作!如果我使用一个变量,并将其设置为表名,它也可以工作

有人能告诉我我做错了什么吗


谢谢你提供的任何信息

您的字符串应该如下所示:

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

您的字符串应如下所示:

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

请注意,此代码对SQL注入非常开放,这是一个巨大的安全问题。。。 最好使用带参数的查询

试试看

请注意,此代码对SQL注入非常开放,这是一个巨大的安全问题。。。
最好使用带参数的查询

若要在字符串中添加转义字符,您需要在前面添加转义字符:\

若要在字符串中添加转义字符,您需要在前面添加转义字符:\

您的转义字符太多了

应该是

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'"
还有,为什么不使用像LINQ这样的实体框架呢?

您的实体框架太多了

应该是

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

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

它甚至不会编译,而是在第一个撇号之前结束字符串

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

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

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

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

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

太多的双引号

为了便于阅读,您可以尝试以下方法:

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

应该完成同样的事情。

双引号太多了

为了便于阅读,您可以尝试以下方法:

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

应该完成同样的事情。

没有添加它,因为您在字符串的前面结束了它

看看string.Format,它是构造字符串的另一种方法


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

它没有被添加,因为您正在字符串的前面结束它

看看string.Format,它是构造字符串的另一种方法


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

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


其他人已经回答了这个问题,但是在这些答案之上,使用string.Format更容易


在我看来,应该避免在代码中构建连接的SQL字符串。做那样的事纯粹是邪恶的

但是,如果必须,请尝试以下方法:

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

在我看来,应该避免在代码中构建连接的SQL字符串。做那样的事纯粹是邪恶的

但是,如果必须,请尝试以下方法:

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

嘿,为什么要投否决票?这是一个非常合理的问题:你有没有试着编译这段代码?”因为它不会!抱歉-您说得对,这行应该是:string sSQL=SELECT Name FROM_Columns,其中Table=+'+myTable.TableName+';您的意思是从_列中选择'Name',其中'Table`=+'+myTable.TableName+';?这样更具可读性嘿,为什么投反对票?这是一个非常合理的问题:你有没有试着编译这段代码?”因为它不会!抱歉-您说得对,这行应该是:string sSQL=SELECT Name FROM_Columns,其中Table=+'+myTable.TableName+';您的意思是从_列中选择'Name',其中'Table`=+'+myTable.TableName+';?通过这种方式更具可读性谢谢您的回复。我也试过了,但还是得到了同样的结果。Re:LINQ:要使用LINQ,我需要某种数据库“提供者”层来处理与数据库的连接吗?我正在尝试使用windows installer数据库,而不是标准的SQL server、Sybase等。感谢回复。我也试过了,但还是得到了同样的结果。Re:LINQ:要使用LINQ,我需要某种数据库“提供者”层来处理与数据库的连接吗?我正在尝试使用windows installer数据库,而不是标准的SQL server、Sybase等。一定是我的项目中的某些内容导致了这个问题。我创建了一个新项目,尝试了这里提出的所有建议,它们都成功了!但当我在我的项目中尝试时,他们都没有。谢谢大家的帮助…一定是我的项目中的某些东西导致了这个问题。我创建了一个新项目,尝试了这里提出的所有建议,它们都成功了!但当我在我的项目中尝试时,他们都没有。谢谢大家的帮助。。。