Что еще никто не предложил, так это то, какую проверку вы выполняете для значения dbname
. Вы уверены, что в нем нет пробелов? Что это не зарезервированное слово? Что он не содержит вредоносного кода? По крайней мере, вы должны заключить его в квадратные скобки:
sqlCreateDBQuery = String.Format(" CREATE DATABASE [{0}]", dbname);
Я действительно надеюсь, что вы не разрешаете пользователю вводить это имя прямо в текстовое поле где-нибудь. Даже если вы используете защиту свойств на начальном входе, а это происходит из какой-то общей базы данных «клиентов», вы можете настроить себя на уязвимость Sql Injection второго порядка.
После вы обратились к этому, мы можем посмотреть здесь сообщение об ошибке. В этом случае проблема заключается в том, что ваш веб-пользователь не имеет соответствующих разрешений CREATE. Вы должны исправить это, и это должно позволить вам продолжить. Возможно, вы захотите зарезервировать для этого специальную учетную запись, на которую вы переключаетесь только сейчас, чтобы ваше приложение обычно не запускалось в контексте, который позволял бы выполнять такие действия.