2015-03-31 5 views
0

Мой код:Как сделать ВСТАВИТЬ Строка запроса с использованием массива переменных

For index = 0 To dupColIndx - 1 
    expression(index) = dgvINSRT.Rows.Item(i).Cells.Item(index).Value.ToString 
Next 

Dim strInsrt As String = "INSERT INTO " & _ 
         dbTbl & _ 
         colStr & _ 
         Strings.Replace(expression(0), "'", "''", 1, -1, CompareMethod.Binary) & "','" & _ 
         Strings.Replace(expression(1), "'", "''", 1, -1, CompareMethod.Binary) & "','" & _ 
         Strings.Replace(expression(2), "'", "''", 1, -1, CompareMethod.Binary) & "')" 

В коде выше, вместо ручного ввода выражения (0), выражение (1), и т.д. Я хочу строку автоматически объединяться после ввода значения «n» для выражения (n).

Спасибо.

+0

Как вы используете строку запроса вставки? Вы действительно отправляете команду в базу данных? Если это так, я настоятельно рекомендую использовать параметризованный (через 'SqlCommand',' OracleCommand' и т. Д.), Чтобы избежать проблем с SQL-инъекцией (или для сбора плохих данных). Было бы достаточно легко перебрать ваш массив, чтобы добавить каждый элемент в качестве параметра в объект команды для отправки в базу данных. Необходимо знать, какой тип объекта команды вы используете, если это так, написать соответствующий образец кода. – RianBattle

ответ

1

Вы можете использовать String.Join:

For index = 0 To dupColIndx - 1 
    expression(index) = dgvINSRT.Rows.Item(i).Cells.Item(index).Value.ToString.Replace("'", "''") 
Next 

Dim strInsrt As String = "INSERT INTO " & _ 
        dbTbl & _ 
        colStr & _ 
        String.Join("','", expression) & "')" 

Примечание: Если вы убегаете значения самостоятельно, это важно, что вы используете правильную замену для базы данных, которую вы используете, или запрос широко открыт для Атаки SQL-инъекций. Используемый здесь метод работает для SQL Server и Access, но может быть неправильным для других баз данных. Это не подходит для MySQL, например, вам также необходимо избежать обратных косых черт.

+0

Строка возвращается следующим образом: 'INSERT INTO ['Part Commodity Class $'] ([Dispatch Commodity], [Dispatch Commodity Temp], [Dispatch Commodity 2]) VALUES ('DispatchCommodity3', 'DispatchCommodityTemp3', 'DISPATCHCOMMODITY3 ',' ') ' Все в порядке, но я не могу ВСТАВИТЬ В dataTable из-за', 'в конце. Пожалуйста, помогите снять это. – TheDProgrammer

+0

@ TheDProgrammer: Это означает, что массив 'expression' имеет один элемент слишком много. Он должен быть создан с использованием выражения ReDim (dupColIndx - 1) '. – Guffa

+0

You Rock! ... Он работал с Dim Dim (dupColIndx - 1) As String' ... Спасибо большое :) – TheDProgrammer

1
If expression.Count >= 1 
    Dim strInsrt As String = "INSERT INTO " & dbTbl & colStr 

    For i= 0 To expression.Count - 2 
     strInsrt &= "'" & Strings.Replace(expression(i), "'", "''", 1, -1, CompareMethod.Binary) & "'," 
    Next i 

    strInsrt &= "'" & Strings.Replace(expression(expression.Count - 1), "'", "''", 1, -1, CompareMethod.Binary) & "')" 
End If 
+0

В конце есть дополнительная запятая и двойная кавычка (а именно, ''), которая делает невозможным использование ЗАПИСИ ВСТАВКИ. Пожалуйста, помогите мне исправить это: 'INSERT INTO ['Part Commodity Class $'] ([Dispatch Commodity], [Dispatch Commodity Temp], [Dispatch Commodity 2]) VALUES ('DispatchCommodity2', 'DispatchCommodityTemp2', 'DISPATCHCOMMODITY2' , '') ' – TheDProgrammer

+0

обновил мой ответ, возможно, вам придется немного изменить значение' colStr', так как я не знаю, что в нем. – ibiza

 Смежные вопросы

  • Нет связанных вопросов^_^