Member 11856456 Ответов: 1

Как использовать use checklistbox для создания инструкции SQL merge delete?


Поэтому благодаря Ричарду я смог позволить пользователям нажимать на элементы checklistbox и использовать их при создании таблицы sql внутри vb.net. Поэтому я попытался взять его потрясающий пример и использовать его аналогичным образом. пока что вот что у меня есть:

Dim cb As New System.Text.StringBuilder("MERGE INTO")
       Dim tableName As String = ListBox1.SelectedItems(Convert.ToString(tableName))
       Dim tablename2 As String = ListBox2.SelectedItems(Convert.ToString(tablename2))
       cb.AppendFormat(" [{0}] ", tableName.Replace("]", "]]"))
       cb.Append("as T")
       cb.AppendFormat(" using [{0}] ", tablename2.Replace("]", "]]"))
       cb.Append("As S")
       '   cb.AppendFormat(", [{0}] nvarchar(max) NULL", tableName.Replace("]", "]]"))

       For Each item In CheckedListBox1.CheckedItems
           Dim columnName As String = Convert.ToString(item)
           cb.AppendFormat("on T." + columnName.Replace("]", "]]") + "[{0}]S." + columnName.Replace("]", "]]"))
       Next
       cb.Append(")")

       Dim sql As String = cb.ToString()

       sqlcon.Open()
       Dim cmd As SqlClient.SqlCommand
       cmd = New SqlClient.SqlCommand(sql, sqlcon)

       cmd.ExecuteNonQuery()
       sqlcon.Close()


вот оператор sql, который я пытаюсь использовать в этом коде:

Merge into table1 as T
using [table] as S
on T.[Last Name] = S.[Last Name] and T.[First Name] = S.[First Name]

When Matched then 
Update Set T.[age] = S.[age];

DELETE T1 FROM [table] T1 JOIN [table1] T2 ON T1.[Last Name] = T2.[Last Name] AND T1.[First Name] = T2.[First name];


Мне нужна помощь, чтобы разобраться с этим. У меня возникли трудности с ands, и должен ли я запустить новый строковый конструктор для when matched и delete from?

Что я уже пробовал:

Я заменил несколько символов, чтобы сделать строку sql точной.

1 Ответов

Рейтинг:
1

Ashwin. Shetty

Если я правильно понял ваш вопрос, вы столкнулись с проблемой добавления операторов в запрос. Возможным решением было бы взять предложение Joins / where в отдельном строковом конструкторе, а затем проверить длину того же самого, чтобы решить, нужно ли добавлять какой-либо оператор или нет.

Я надеюсь, что вы не принимаете имена таблиц и полей непосредственно из пользовательского интерфейса. Если это так, то, пожалуйста, поищите SQL-инъекцию. Образец доступен здесь[^]