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

1

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

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

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

Теги:
sql-server
asp.net-mvc
command-line

2 ответа

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

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

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

0

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

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

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;
    }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню