Как можно безопасно создать запрос, в котором будут перечислены имена столбцов с указанием имени таблицы и строки подключения, которая может указывать на SQL Server или MySQL? - PullRequest
0 голосов
/ 05 июня 2019

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

Меня беспокоит то, что SQL Server использует TABLE_CATALOG для имени базы данных, а MySQL использует TABLE_SCHEMA.Я не уверен, могу ли я рассчитывать на это в любой ситуации.

private string GetTableColumnsQuery(ConnectionStringSettings conString, string tableName)
{
    string query;
    if (conString.Name == "mysql")
    {
        var con = new MySqlConnectionStringBuilder(conString.ConnectionString);
        query = $"select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='{tableName}' and TABLE_SCHEMA='{con.Database}'";
    }
    else
    {
        var con = new SqlConnectionStringBuilder(conString.ConnectionString);
        query = $"select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='{tableName}' and TABLE_CATALOG='{con.Database}'";
    }

    return query;
}

Будет ли это надежно работать для всех баз данных SQL Server и MySQL, и я должен изменить это определенным образом, чтобы избежать ошибки, котораяЯ пропускаю?

И наконец, если код никоим образом не предназначен для пользователя, все еще рекомендуется готовые утверждения?

Спасибо.

1 Ответ

1 голос
/ 05 июня 2019

MySQL и SQL Server уже давно поддерживают INFORMATION_SCHEMA представления.Таким образом, ваш код должен работать в любой базе данных.Вы выбираете только имя столбца, чтобы другие различия в таблицах не влияли на ваш код.«Схема» интерпретируется немного по-другому, но сам код должен работать.

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

Другие проблемы - это повторное использование плана запроса.и избегая синтаксических ошибок.Изменение строки запроса - не лучший способ передачи параметров.

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