Удаление таблицы SQL путем передачи параметра в Visual Basic - PullRequest
0 голосов
/ 04 мая 2019

Попытка создать функцию, которая удалит таблицу на сервере sql, используя параметр для имени таблицы.

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

    Private Sub DeleteTable(tablename As String)
        'Add sql params and run command
        SQL.AddParam("@thistablesname", tablename.ToString)

        SQL.ExecQuery("DROP TABLE @thistablesname;", True)
        'SQL.ExecQuery("DROP TABLE Iamanewtable;", True) 'works

        'Report and abort on errors
        If SQL.HasException(True) Then Exit Sub

        MsgBox("Table may have been deleted successfully")

    End Sub

Ответы [ 2 ]

1 голос
/ 04 мая 2019

При условии, что ваши данные чисты, вы можете просто собрать строку с именем и выполнить ее без параметризации, но остерегайтесь SQL-инъекций.

При немного более безопасном подходе вы могли бы сделать с двумя запросами sql. Сначала запросите базу данных, чтобы узнать, существует ли фактическое имя таблицы

SELECT TABLE_NAME 
   FROM INFORMATION_SCHEMA.TABLES 
   WHERE TABLE_TYPE = 'BASE TABLE' 
   AND TABLE_SCHEMA = @parmTable

добавить имя таблицы в качестве параметра и выполнить запрос. Если результат запроса возвращает количество строк, равное 1, то вы знаете, что у вас хорошее значение. Тогда вы можете построить свою строку как

SQL.ExecQuery( "DROP TABLE " + tablename.ToString, True )

Поскольку вы предварительно указали полное имя таблицы, пытавшееся ЕСТЬ действительное имя таблицы через квалифицированный первый запрос, вы можете удалить с меньшим беспокойством о sql-инъекции.

Возможно, вам даже будет полезно создать собственную функцию, в которую вы передаете параметр имени таблицы, который выполняет как проверку, так и динамический SQL, чтобы отбросить таблицу, если это будет общий процесс.

0 голосов
/ 04 мая 2019

Попробуй так:

SqlCommand cmd = new SqlCommand("DROP TABLE @thistablesname;", cn)
cmd.Parameters.Add(new SqlParameter("@thistablesname", tablename));
cmd.ExecuteReader();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...