我正在处理的项目中有以下代码:
foreach(DataTable myTable in myDataSet.Tables)
{
string sSQL = "SELECT `Name` FROM _Columns WHERE `Table` = "'" + myTable.TableName + "'"
MessageBox.Show(sSQL);
}
由于某种原因,第二个撇号(')没有被添加到字符串中。事实上,我尝试在myTable.TableName之后追加的任何内容都不会被追加。如果我用表的名称替换myTable.TableName,它就可以了!如果我使用变量,并将其设置为表名,它也可以工作!
谁能告诉我这里我做错了什么?
感谢您的任何信息!
答案 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);
}