Как предоставить интерфейс командной строки SQL (например, osql) для базы данных MSSQL через веб-страницу в .NET MVC (c #) - PullRequest
1 голос
/ 25 марта 2009

Я хотел бы предоставить интерфейс командной строки для моей базы данных, который позволяет пользователю вводить команды или запросы базы данных MULTIPLE (разделенные переносами строк в текстовой области)

Для каждой строки, если ее запрос должен возвращать результаты и если это команда, независимо от того, была она успешной или нет, что позволяет пользователю вставить скрипт в текстовую область и нажать «GO», чтобы выполнить пакет .

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

Ответы [ 2 ]

1 голос
/ 25 марта 2009
  1. Подумайте о проблемах безопасности, которые вы затрагиваете на своем веб-сайте.

  2. Подумайте еще раз о безопасности. Как умный пользователь (более умный, как вы / я) может взломать базу данных, используя эту страницу.
    Возможно / возможно, используется какой-то искаженный SQL, о котором вы не думаете на этом этапе.

  3. Используйте прямое SqlConnection и SqlCommand , когда база данных, которую вы используете, является сервером SQL. Используйте оракула или других партнеров поставщика, когда вам нужно использовать их. SqlCommand может возвращать больше как 1 результат, это удобно в случае нескольких команд в одном запросе. См. NextResult метод для получения дополнительной информации.

0 голосов
/ 25 марта 2009

Как указано в предыдущем ответе, не делайте этого, если это общедоступный сайт!

Если вы должны это сделать, следующий код близок к тому, что вы ищете - с небольшой модификацией вы получите именно то, что вы хотите.

public static bool ExecuteSql(string sqlScript)
{
    bool success = true;

    using (SqlConnection cn = new SqlConnection([YourConnectionString]))
    {
        SqlCommand cmd = null;
        try
        {
            cn.Open();

            string[] commands = sqlScript.Split(new string[] { "GO\r\n", "GO ", "GO\t" }, StringSplitOptions.RemoveEmptyEntries);
            foreach (string c in commands)
            {
                cmd = new SqlCommand(c, cn);
                cmd.CommandType = CommandType.Text;
                cmd.ExecuteNonQuery();
            }
        }
        catch (Exception ex)
        {
            success = false;
            throw new Exception("Failed to execute sql.", ex);
        }
        finally
        {
            cn.Close();
        }

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