Значение строки SQL, охватывающее несколько строк в запросе - PullRequest
28 голосов
/ 16 ноября 2011

ОБНОВЛЕНИЕ : биография может содержать апострофы (см. Обновленный пример)

У меня есть SQL-запрос, значение которого охватывает несколько строк и вызывает сбой запроса:

UPDATE User SET UserId=12345, Name="J Doe", Location="USA", Bio="I'm a
bio that has an apostrophe, and I'm 
spanning multiple lines!" 
WHERE UserId=12345

В C # вы можете поставить @ перед строкой Bio=@"...", чтобы позволить ей занимать несколько строк, но я не уверен, как этого можно достичь с помощью SQL-запросов.Как получить строку, занимающую несколько строк, без необходимости выполнять такие вещи, как ручная конкатенация строк:

Bio="I'm a"
+" bio that has an apostrophe, and I'm"
+" spanning multiple lines!" 

Ответы [ 4 ]

49 голосов
/ 16 ноября 2011

SQL Server позволяет следующее (будьте осторожны, используйте одинарные кавычки вместо двойных)

UPDATE User
SET UserId = 12345
   , Name = 'J Doe'
   , Location = 'USA'
   , Bio='my bio
spans 
multiple
lines!'
WHERE UserId = 12345
0 голосов
/ 09 сентября 2014

Я предпочитаю использовать символ @, поэтому я вижу запрос точно так же, как могу скопировать и вставить в файл запроса:

string name = "Joe";
string gender = "M";
string query = String.Format(@"
SELECT
   *
FROM
   tableA
WHERE
   Name = '{0}' AND
   Gender = '{1}'", name, gender);

Это действительно здорово с длинными сложными запросами. Приятно то, что он поддерживает вкладки и переводы строк, поэтому вставка в браузер запросов сохраняет хорошее форматирование

0 голосов
/ 11 июня 2013

с вашим VARCHAR вам также может потребоваться указать длину, или обычно она равна

Как насчет того, чтобы захватить текст, жалить его, а затем поместить его в запрос с

String TableName = "ComplicatedTableNameHere";  
EditText editText1 = (EditText) findViewById(R.id.EditTextIDhere); 
String editTextString1 = editText1.getText().toString();  

ВНИЗ

String TableName = "ComplicatedTableNameHere";            
    //sets the table name as a string so you can refer to TableName instead of writing out your table name everytime

EditText editText1 = (EditText) findViewById(R.id.EditTextIDhere); 
    //gets the text from your edit text fieldfield 
    //editText1 = your edit text name
    //EditTextIDhere = the id of your text field

String editTextString1 = editText1.getText().toString();  
    //sets the edit text as a string
    //editText1 is the name of the Edit text from the (EditText) we defined above
    //editTextString1 = the string name you will refer to in future

, затем используйте

       /* Insert data to a Table*/
       myDB.execSQL("INSERT INTO "
         + TableName
         + " (Column_Name, Column_Name2, Column_Name3, Column_Name4)"
         + " VALUES ( "+EditTextString1+", 'Column_Value2','Column_Value3','Column_Value4');");

Надеюсь, это поможет кое-что ...

ПРИМЕЧАНИЕ каждая строка находится в пределах

'"+stringname+"'

это 'и', которые включают многострочный элемент srting, без него вы просто получите первую строку, даже не будучи уверенным, что вы получите всю строку, это может быть просто первое слово

0 голосов
/ 16 ноября 2011

Что такое тип данных столбца "BIO"? Какой сервер базы данных (sql / oracle / mysql)? Вы должны иметь возможность занимать несколько строк сколько хотите, если вы придерживаетесь ограничения на количество символов в типе данных столбца (т. Е. Varchar (200)). Попробуйте использовать одинарные кавычки, это может иметь значение. Это работает для меня:

update table set mycolumn = 'hello world,
my name is carlos.
goodbye.'
where id = 1;

Кроме того, вы можете включить проверку одинарных кавычек, если объединяете строку sql вместе в C #. Поэтому, если переменная содержит одинарные кавычки, которые могли бы выйти из кода из оператора sql, не выполняйте все строки, которые вы ожидали увидеть.

Кстати, вы можете разделять ваши операторы SQL точкой с запятой, как вы делаете это в C #, как FYI.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...