Невозможно создать базу данных, используя параметр для имени базы данных SQL Server & C # - PullRequest
0 голосов
/ 18 мая 2018

Я пытаюсь использовать этот код:

var connString = "Server=localhost\\SQLEXPRESS;Integrated Security = SSPI; database = master";
string cmdText = "CREATE DATABASE @userDatabase";

using (var sqlConnection = new SqlConnection(connString))
{
    using (var sqlCmd = new SqlCommand(cmdText, sqlConnection))
    {
        sqlCmd.Parameters.Add("@userDatabase", System.Data.SqlDbType.NVarChar).Value = databaseName;

        sqlConnection.Open();
        sqlCmd.ExecuteNonQuery();
    }
}

Я получаю сообщение об ошибке sqlCmd:

'Неверный синтаксис рядом с @ userDatabase'

Однако, когда я добавляю базу данных с использованием динамического кода SQL, я не получаю ошибок, и запрос выполняется отлично (хотя я слышал, что это будет опасно).

1 Ответ

0 голосов
/ 18 мая 2018

Для этого вы можете создать динамический запрос.

private void SetupDatabase(string dbFolder, string dbName)
{
  if (Directory.Exists(String.Format("{0}\\db", dbFolder)) == false)
  {
    Directory.CreateDirectory(String.Format("{0}\\db", dbFolder));
  }
  if (File.Exists(String.Format("{0}\\db\\{1}_Data.mdf", dbFolder, dbName)) == false)
  {
    ExecuteQuery(
      "master",
      String.Format("CREATE DATABASE {1} ON PRIMARY (NAME = {1}_Data, FILENAME = '{0}\\db\\{1}_Data.mdf', SIZE = 2MB, FILEGROWTH = 10%) LOG ON (NAME = {1}_Log, FILENAME = '{0}\\db\\{1}_Log.ldf', SIZE = 1MB, MAXSIZE = 5MB, FILEGROWTH = 10%)", dbFolder, dbName));
  }
}

private void ExecuteQuery(
  string db,
  string query)
{
  SqlConnection connection = null;
  try
  {
    connection = new SqlConnection(string.Format(connectionString, db));
    connection.Open();

    // Creates DB
    using (SqlCommand command = new SqlCommand(query, connection))
    {
      command.ExecuteNonQuery();
    }
  }
  catch (Exception ex)
  {
    throw ex;
  }
  finally
  {
    connection.Close();
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...