C # вопрос объединения строк новичка - PullRequest
0 голосов
/ 07 августа 2011

У меня есть следующий код в проекте, над которым я работаю:

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

По какой-то причине второй апостроф (') не добавляется в строку. Фактически, все, что я пытаюсь добавить после myTable.TableName, не добавляется. Если я заменю myTable.TableName именем таблицы, это будет работать! Если я использую переменную и задаю для нее имя таблицы, она тоже работает!

Может кто-нибудь сказать мне, что я здесь делаю не так?

Спасибо за любую информацию!

Ответы [ 10 ]

2 голосов
/ 07 августа 2011

Это даже не скомпилируется, вы заканчиваете строку перед первым апострофом.

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'"
1 голос
/ 07 августа 2011

у вас слишком много "

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

должно быть

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

Кроме того, почему вы не используете каркас сущностей, такой как LINQ?

1 голос
/ 07 августа 2011

Чтобы поместить "внутри строки, вам нужно добавить escape-символ перед: \"

1 голос
/ 07 августа 2011

try

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

ВНИМАНИЕ, что этот код широко открыт для внедрения SQL-кода, что является серьезной проблемой безопасности ...Лучше вместо этого используйте запросы с параметрами!

0 голосов
/ 07 августа 2011

На мой взгляд, вам следует избегать создания в коде объединенных строк SQL. Делать подобные вещи просто зло.

Однако, если необходимо, попробуйте что-то вроде этого:

foreach(DataTable myTable in myDataSet.Tables)
{
    string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + 
                       myTable.TableName.Replace("'", "''") + "'";
    MessageBox.Show(sSQL);
}
0 голосов
/ 07 августа 2011

Другие ответили на это, но поверх этих ответов, для этого проще использовать string.Format

var sSQL = string.Format("Select 'Name' FROM _Columns WHERE 'Table' = '{0}'", myTable.TableName);
0 голосов
/ 07 августа 2011

это не добавляется, потому что вы заканчиваете строку непосредственно перед ней.

посмотрите на строку. Формат как альтернативный способ построения строк.сказал, что код ТАТ не должен даже компилироваться.

0 голосов
/ 07 августа 2011

Слишком много двойных кавычек.

Вы можете попробовать это для более удобного чтения:

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

Должен выполнить то же самое.

0 голосов
/ 07 августа 2011

Попробуйте это.

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'";
0 голосов
/ 07 августа 2011

Ваша строка должна выглядеть так:

string sSQL = "SELECT `Name` FROM  _Columns WHERE `Table` = '" + myTable.TableName + "'";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...