2010-12-07 3 views
0

У меня возникла путаница с этой конкатенацией строк Может ли какой-нибудь орган рассказать мне, как происходит эта конкатенация строк? Путаница я имею что, как это +, "", ' работают в этомстрока конкатенации в sql-запросе

int i = Magic.Allper("insert into tbl_notice values ('" + Label1.Text + "','" + companyTxt.Text + "','" + txtBranch.Text + "','" + dateTxt.Text + "' ,'" + reportingTxt.Text + "','" + venueTxt.Text + "','" + eligibilityTxt.Text + "')"); 
+1

Как задать вопрос - http://tinyurl.com/so-hints – Oded

+0

какая ошибка вы получаете? – hvgotcodes

+1

http://en.wikipedia.org/wiki/SQL_injection –

ответ

3

Что-нибудь между двумя " символами берется в виде строки в Java так "','" производит ','. SQL требует строк, завернутых в '. Таким образом, "'" + venueTxt.Text + "'" анализирует до 'variable value' при выполнении запроса.

+0

сэр, почему мы должны использовать знак +, чтобы мы не могли напрямую использовать знак запятой и продолжить.и если мы используем знак + и помещаем строку в двойные кавычки, не нужно ли вводить запятую в двойные кавычки, используя знак +? – NoviceToDotNet

+0

Строковый литерал отличается от переменной, нам нужно захватить значение переменной (это может быть строка или int или double и т. Д.), А затем присоединить их вместе с остальной частью инструкции (используя +). – greenimpala

2

Я настоятельно рекомендую вам не использовать конкатенацию строк в SQL-запросах. Они провокационные SQL-инъекции. Это вызовет проблемы с безопасностью.

What is SQL Injection?

В ответ на ваш вопрос, это объединение просто принимает все TextBox.Text значения свойства и сцепить его в вставном заявление.

Я настоятельно рекомендую, что вы используете параметризованные запросы с использованием ADO.NET Lise следующий пример (предполагается, что SQL Server):

using (var connection = new SqlConnection(connString)) 
    using (var command = connection.CreateCommand()) { 
     string sql = "insert into tbl_notice values(@label1, @companyTxt, @txtBranch, @dataTxt, @reportingTxt, @venueTxt, @eligibilityTxt)"; 

     command.CommandText = sql; 
     command.CommandType = CommandType.Text; 

     SqlParameter label1 = command.CreateParameter(); 
     label1.ParameterName = "@label1"; 
     label1.Direction = ParameterDirection.Input; 
     label1.Value = Label1.Text; 

     SqlParameter companyTxt = command.CreateParameter(); 
     companyTxt.ParameterName = "@companyTxt"; 
     companyTxt.Direction = ParameterDirection.Input; 
     companyTxt.Value = companyTxt.Text; 

     // And so forth for each of the parameters enumerated in your sql statement. 

     if (connection.State == ConnectionState.Close) 
      connection.Open(); 

     int rowsAffected = command.ExecuteNonQuery(); 
    } 
+1

+1 для удаления downvote. Я также хотел бы представить Java-программистов для «хранимых процедур» – Guy

+0

@Guy: Спасибо! Несмотря на то, что я действительно не знаю, почему нисходящий. Так или иначе! Это не имеет значения! =) –

+0

Что такое инструкция var в использовании? Вместо этого я использую строку. – NoviceToDotNet

1

я хотел бы использовать метод string.Format для ясности

int i = Magic.Allper(string.Format("insert into tbl_notice values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}')", 
    Label1.Text, 
    companyTxt.Text, 
    txtBranch.Text, 
    dateTxt.Text, 
    reportingTxt.Text, 
    venueTxt.Text, 
    eligibilityTxt.Text)); 

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

public static string ToSqlFormat(this string mask, params string[] args) 
{ 
    List<string> safe = args.ToList(); 
    safe.ForEach(a => a.Replace("'", "''")); 
    return string.Format(mask, safe); 
} 

, который позволит вам написать

string insert = "insert into tbl_notice values ('{0}','{1}','{2}','{3}','{4}','{5}','{6}')"; 
int i = Magic.Allper(insert.ToSqlFormat( 
    Label1.Text, 
    companyTxt.Text, 
    txtBranch.Text, 
    dateTxt.Text, 
    reportingTxt.Text, 
    venueTxt.Text, 
    eligibilityTxt.Text)); 
2
("insert into tbl_notice values ('" + Label1.Text + "','" + companyTxt.Text + "','" + txtBranch.Text + "','" + dateTxt.Text + "' ,'" + reportingTxt.Text + "','" + venueTxt.Text + "','" + eligibilityTxt.Text + "')"); 

Предполагая, что

  • Label1 = Hello
  • companyTxt = ABC
  • txtBranch = Engineering
  • dateTxt = 2010-12-01
  • reportingTxt = Фергюссон
  • venueTxt = Batcave
  • eligibilityTxt = Нет

Вышеуказанные значения заменяются в операторе SQL, что делает его похожим на

("insert into tbl_notice values ('" + Hello + "','" + ABC + "','" + Engineering + "','" + 2010-12-01 + "' ,'" + Fergusson + "','" + Batcave + "','" + No + "')"); 

Знак "+" оператор соединяет строку полученные в результате

("insert into tbl_notice values ('Hello','ABC','Engineering','2010-12-01' ,'Fergusson','Batcave','No')") 
Смежные вопросы